0

考虑以下 npm 脚本。

$ npm run
available via `npm run-script`:
  make
    OUTPUT=dist/main.js bash -c 'elm make src/Main.js --output=$0 $1'
  make:dev
    npm run make -- '$OUTPUT' --debug
  make:prod
    npm run make -- '>(npm run uglify -- $OUTPUT)' --optimize
  uglify
    uglifyjs --compress 'pure_funcs="F2,F3,F4,F5,F6,F7,F8,F9,A2,A3,A4,A5,A6,A7,A8,A9",pure_getters,keep_fargs=false,unsafe_comps,unsafe' | uglifyjs --mangle --output=

我想按如下方式使用它:

$ npm run make -- '$OUTPUT' '--debug'


> experiment@0.1.0 experiment /Users/Adit/experiment
> OUTPUT=dist/main.js bash -c 'elm make src/Main.js --output=$0 $1' '$OUTPUT' '--debug'

这将正确创建 Elm 应用程序的调试版本。然而,事实并非如此。不使用单引号,而是npm run使用双引号:

$ npm run make -- '$OUTPUT' '--debug'


> experiment@0.1.0 experiment /Users/Adit/experiment
> OUTPUT=dist/main.js bash -c 'elm make src/Main.js --output=$0 $1' "$OUTPUT" "--debug"

因此,输出不是我所期望的。在不编写自定义 shell 脚本的情况下解决此问题的最佳方法是什么?我想OUTPUT在两个不同的命令中使用该变量。但是,我只想在一个地方定义它。

4

1 回答 1

0

我解决了如下问题。

{
    "config": {
        "input": "src/Main.elm",
        "output": "dist/main.js"
    },
    "scripts": {
        "make": "elm make $npm_package_config_input --output $npm_package_config_output",
        "make:dev": "npm run make -- --debug",
        "make:prod": "npm run make -- --optimize",
        "postmake:prod": "uglifyjs $npm_package_config_output --compress 'pure_funcs=\"F2,F3,F4,F5,F6,F7,F8,F9,A2,A3,A4,A5,A6,A7,A8,A9\",pure_getters,keep_fargs=false,unsafe_comps,unsafe' | uglifyjs --mangle --output=$npm_package_config_output"
    }
}

因此,如果您想在多个 npm 脚本中使用配置变量,您可以将它们添加configpackage.json. 之后,您可以通过名称访问它们作为 npm 脚本中的环境变量,$npm_package_config_<name>其中<name>是您的配置变量的名称。

我还使用 post 脚本而不是进程替换来丑化 Elm 编译器的输出。这样做总体上比通过bash -c.

最后,您可以针对不同的构建运行makemake:dev或。make:prod第一个是常规构建。第二个是使用 Elm 调试工具的开发版本。第三个是常规构建,针对生产使用进行了优化和缩小。

于 2019-07-24T08:36:44.360 回答