npm run:如何在脚本调用中传递参数并用param替换占位符

时间:2017-11-23 15:38:37

标签: npm npm-scripts

我想在package.json中定义一个scripts条目,以简化几个环境的构建。

在脚本执行中,我需要通过我将传递给$1的参数替换npm run build-script(或占位符所需的任何语法),例如--env=prod甚至更简单, --prod。我怎样才能做到这一点?我在这里找到的其他问题和答案并没有帮助我解决问题。

"scripts": { 
  "build-for": "ng build --output-path=../../web/admin-v2 --env=$1 --base-href=\"/admin-v2/\""
}

2 个答案:

答案 0 :(得分:1)

我经常为这种情况创建一个实用程序节点脚本,并通过scripts的{​​{1}}部分调用它。

<强>集结for.js

package.json

var nodeCLI = require('shelljs-nodecli'); var env = '--env=foo'; // <-- Default env flag/value when no arg provided. if (process.argv.indexOf('--prod') !== -1) { env = '--env=prod'; } // Check for other possible env values if (process.argv.indexOf('--quux') !== -1) { env = '--env=quux'; } // Run the ng build command nodeCLI.exec('ng', 'build', '--output-path=../../web/admin-v2', env, '--base-href=\"/admin-v2/\"'); 利用节点process.argv确定通过CLI传递的参数/标志,然后调用build-for.js命令(当前在ng中定义的命令)使用shelljs-nodecli

package.json

让我们假设npm i -D shelljs-nodecli被保存到项目根目录中名为build-for.js的隐藏文件夹中;然后,您.scripts的{​​{1}}部分将定义如下:

<强>的package.json

scripts

运行脚本

运行:

调用npm脚本

package.json

请注意参数{ ... "scripts": { "build-for": "node ./.scripts/build-for" }, ... } 之前的特殊npm run build-for -- --prod必须包含在解释here

之前
  

从npm@2.0.0开始,您可以在执行脚本时使用自定义参数。 getopt使用特殊选项来分隔选项的结尾。 npm会将 - 之后的所有参数直接传递给你的脚本:

鉴于--中的逻辑,当没有传递参数时,例如:

--prod

... build-for.js标记将设置为npm run build-for

运行以下内容:

env

...将导致--env=foo标记设置为npm run build-for -- --quux

<强>买者

我还没有完全测试env,因此您可能会发现您不需要在以下命令的这一部分--env=quux中转义双引号({{1可能会为你处理。)

build-for.js

答案 1 :(得分:0)

并非完全符合您的要求,但是您可以使用环境变量并内联提供它们:

package.json脚本: "<script>": "echo ${ENV1} ${ENV2}"

运行如下: ENV1=a ENV2=b npm run <script>

$ npm run <script>
a b