我经常为这种场景创建一个实用程序节点脚本,并通过package.json 的scripts 部分调用它。
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 传递的参数/标志,然后调用 ng 命令(当前在 package.json 中定义的命令) 使用 @987654322 @。
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之前的特殊--必须包含here的解释
从 npm@2.0.0 开始,您可以在执行脚本时使用自定义参数。 getopt 使用特殊选项 -- 来分隔选项的结尾。 npm 会将 -- 之后的所有参数直接传递给您的脚本:
鉴于build-for.js 中当前的逻辑 - 例如,当没有传递参数时:
npm run build-for
...env 标志将设置为 --env=foo
运行以下:
npm run build-for -- --quux
...将导致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/\"');