Angular:带参数的 npm 脚本

Posted

技术标签:

【中文标题】Angular:带参数的 npm 脚本【英文标题】:Angular: npm script with params 【发布时间】:2020-01-22 18:16:20 【问题描述】:

我的 package.json 中有几个 npm 脚本:

"scripts": 
  "serve-india-local": "ng serve --project pro-india -c local",
  "serve-india-stag": "ng serve --project pro-india -c stag",
  "serve-india-prod": "ng serve --project pro-india -c prod",
  ...

巴西也是如此

"scripts": 
  ...
  "serve-brazil-local": "ng serve --project pro-brazil -c local",
  "serve-brazil-stag": "ng serve --project pro-brazil -c stag",
  "serve-brazil-prod": "ng serve --project pro-brazil -c prod"

同样,我可以为不同的国家和配置提供更多脚本。

我想将其简化为一个脚本,我可以只使用 2 个参数:

countryName config

所以最终的脚本应该是这样的:

"serve-india-prod": "ng serve --project pro-$countryName -c $config"

有人可以帮我实现吗?

【问题讨论】:

这很有帮助***.com/a/25356509/6885735 *nix 平台上,npm 使用 sh 作为默认 shell,因此您可以将 npm 脚本包装在 shell 函数中并引用两个参数(即 countryNameconfig) 使用$1$2 位置参数。但是,如果您想要一个跨平台的解决方案(即也适用于 Windows cmd shell 的解决方案),那么您需要使用 node.js 辅助脚本。请参阅我的回答 here 以进一步了解。 例如;利用 *nix shell 函数,你的 npm-script 可以定义为:"serve": "func() ng serve --project \"pro-$1\" -c \"$2\"; ; func"。然后你调用命令,例如npm run serve brazil prod 或例如npm run serve india local 等等... 您还可以为$1$2 位置参数提供default-value。例如,如果您将 npm-script 更改为:"serve": "func() ng serve --project \"pro-$1:-india\" -c \"$2:-prod\"; ; func"。现在,如果您通过运行不带任何参数的命令来调用 npm 脚本,例如npm run serve 它将默认为 pro-indiaprod。然而,当您使用参数运行命令时,例如npm run serve brazil prod 它将使用 pro-brazilprod 【参考方案1】:

您可以使用 shell 变量轻松完成此操作

package.jsonscripts 中,包含您的npm 脚本 例如

 
    "scripts":
     "serve-prod": "ng serve --project pro-$countryName -c $config"
    

并在 cli 中运行为 countryName=india config=local npm run serve-prod

这不适用于跨平台,但您可以使用cross-env 或cross-var

【讨论】:

以上是关于Angular:带参数的 npm 脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何将带参数的函数传递给Angular中的内部组件

带参数的Shell脚本?

gnuplot 带参数脚本与python脚本结合

python脚本中调用执行另一个带参数python脚本的问题

C#调用带参数的python脚本

如何在 shell 脚本中将带引号的参数添加到带引号的命令中? [复制]