首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >npm运行:如何在脚本调用中传递参数并用param替换占位符

npm运行:如何在脚本调用中传递参数并用param替换占位符
EN

Stack Overflow用户
提问于 2017-11-23 15:38:37
回答 2查看 3.2K关注 0票数 3

我想在我的package.json中定义一个package.json条目,以简化几种环境的构建。

在脚本执行中,我需要将$1 (或占位符所需的任何语法)替换为传递给npm run build-script的参数,例如--env=prod或更简单的--prod。我怎么能这么做?我在这里发现的其他问题和答案无助于我解决这个问题。

代码语言:javascript
复制
"scripts": { 
  "build-for": "ng build --output-path=../../web/admin-v2 --env=$1 --base-href=\"/admin-v2/\""
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-24 11:39:03

我经常为这种场景创建一个实用程序节点脚本,并通过package.jsonpackage.json部分调用它。

build-for.js

代码语言:javascript
复制
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.jsonscripts部分将定义如下:

package.json

代码语言:javascript
复制
{
  ...
  "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可以为您处理这个问题)。

代码语言:javascript
复制
// Run the ng build command
nodeCLI.exec('ng', 'build', '--output-path=../../web/admin-v2', env, '--base-href=\"/admin-v2/\"');
票数 1
EN

Stack Overflow用户

发布于 2019-07-26 08:58:29

不完全是您想要的,但您可以使用环境变量&将它们内联地提供:

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

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

代码语言:javascript
复制
$ npm run <script>
a b
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47459044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档