【问题标题】:Angular: npm script with paramsAngular:带参数的 npm 脚本
【发布时间】: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"

有人可以帮我实现吗?

【问题讨论】:

  • *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

标签: node.js npm angular-cli package.json npm-scripts


【解决方案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-envcross-var

【讨论】:

    猜你喜欢
    • 2020-07-07
    • 1970-01-01
    • 2021-10-01
    • 2016-09-26
    • 2015-10-30
    • 2023-03-05
    • 2017-12-13
    • 2018-11-18
    • 2015-05-23
    相关资源
    最近更新 更多