我想在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/\""
}
答案 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