NPM运行:如何传递参数,并通过脚本调用PARAM代替占位符

问题描述 投票:1回答:1

我想确定我的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/\""
}
npm npm-scripts
1个回答
1
投票

我常常借助于创建为这种情况的公用事业节点的脚本,并通过scriptspackage.json部分调用它。


集结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一个隐藏文件夹;然后scriptspackage.json部分将被定义如下:

的package.json

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

运行脚本

通过运行调用脚本故宫:

npm run build-for -- --prod

注意特殊--之前必须包含参数--prod作为解释here

作为[email protected]的,你可以在执行脚本时使用自定义的参数。特别选项 - 时使用的getopt界定选项的结束。故宫将通过所有参数的后 - 直接到你的脚本:

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

0
投票

你要找不正是对,但你可以使用环境变量与在线为他们提供:

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

像下面这样运行:ENV1=a ENV2=b npm run <script>

$ npm run <script>
a b
© www.soinside.com 2019 - 2024. All rights reserved.