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 函数中并引用两个参数(即 countryName
和config
) 使用$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-india
和 prod
。然而,当您使用参数运行命令时,例如npm run serve brazil prod
它将使用 pro-brazil
和 prod
。
【参考方案1】:
您可以使用 shell 变量轻松完成此操作
在package.json
下scripts
中,包含您的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 脚本的主要内容,如果未能解决你的问题,请参考以下文章