我想在我的package.json中定义一个package.json条目,以简化几种环境的构建。
在脚本执行中,我需要将$1 (或占位符所需的任何语法)替换为传递给npm run build-script的参数,例如--env=prod或更简单的--prod。我怎么能这么做?我在这里发现的其他问题和答案无助于我解决这个问题。
"scripts": {
"build-for": "ng build --output-path=../../web/admin-v2 --env=$1 --base-href=\"/admin-v2/\""
}发布于 2017-11-24 11:39:03
我经常为这种场景创建一个实用程序节点脚本,并通过package.json的package.json部分调用它。
build-for.js
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/\"');build-for.js利用节点process.argv来确定通过CLI传递的参数/标志,然后使用贝壳-nodecli调用ng命令(当前在package.json__中定义的命令)。
npm i -D shelljs-nodecli
假设build-for.js保存到项目根目录中名为.scripts的隐藏文件夹中;那么package.json的scripts部分将定义如下:
package.json
{
...
"scripts": {
"build-for": "node ./.scripts/build-for"
},
...
}运行脚本
通过运行以下命令调用npm脚本:
npm run build-for -- --prod
注意,参数--prod之前的特殊这里必须包括在解释的这里中。
从npm@2.0.0开始,您可以在执行脚本时使用自定义参数。getopt使用的特殊选项--用于分隔选项的末尾。npm将把后面的所有参数直接传递给您的脚本:
给定build-for.js中的逻辑--例如,当没有传递参数时:
npm run build-for
...the env标志将设置为--env=foo
运行以下命令:
npm run build-for -- --quux
...will导致的env标志将被设置为--env=quux
警告
我还没有完全测试build-for.js,因此您可能会发现,您不需要转义下面命令的'--base-href=\"/admin-v2/\"'部分中的双引号(__nodeCLI可以为您处理这个问题)。
// Run the ng build command
nodeCLI.exec('ng', 'build', '--output-path=../../web/admin-v2', env, '--base-href=\"/admin-v2/\"');发布于 2019-07-26 08:58:29
不完全是您想要的,但您可以使用环境变量&将它们内联地提供:
package.json脚本:"<script>": "echo ${ENV1} ${ENV2}"
像这样运行:ENV1=a ENV2=b npm run <script>
$ npm run <script>
a bhttps://stackoverflow.com/questions/47459044
复制相似问题