gpt4 book ai didi

npm 运行 : how to pass parameter and replace placeholder by param in script call

转载 作者:行者123 更新时间:2023-12-04 17:48:01 24 4
gpt4 key购买 nike

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

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

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

最佳答案

我经常求助于为这种情况创建实用程序节点脚本,并通过 package.jsonscripts 部分调用它。


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) 使用 shelljs-nodecli

npm i -D shelljs-nodecli

假设 build-for.js 被保存到项目根目录中名为 .scripts 的隐藏文件夹中;那么 package.jsonscripts 部分将定义如下:

package.json

{
...
"scripts": {
"build-for": "node ./.scripts/build-for"
},
...
}

运行脚本

通过运行调用 npm 脚本:

npm run build-for -- --prod

请注意参数 --prod 之前的特殊 -- 必须包含在解释中 here

As of npm@2.0.0, you can use custom arguments when executing scripts. The special option -- is used by getopt to delimit the end of the options. npm will pass all the arguments after the -- directly to your script:

鉴于当前在 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/\"');

关于npm 运行 : how to pass parameter and replace placeholder by param in script call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47459044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com