我已经搜索了几天,但没有找到适合我问题的答案。
我想通过Windows中的cmd或Powershell运行npm脚本,并为脚本变量传递值。 我想要package.json
的波纹管脚本:
"scripts": {
"happy-birthday": "echo Happy birthday $NAME and many returns!"
}
要输出:
丹尼生日快乐,很多回报!
使用如下命令:
npm run happy-birthday --NAME=Danny
到目前为止,我测试的所有内容都给了我:
生日快乐$NAME和许多回报!
感觉 npm 没有将其识别为变量并将其打印为字符串。我还测试了 %NAME%。
Npm 版本 - 6.12.1
不能将参数传递到 npm 脚本的中间,参数只能传递到它们的末尾。有关进一步的解释,请参阅此处的回答。
根据您的示例,请考虑以下解决方案,该解决方案将在所有平台上成功运行:
-
在package.json文件中,定义
happy-birthday
npm 脚本,如下所示:"scripts": { "happy-birthday": "node -e "console.log('Happy birthday %s and many returns!', process.argv[1] || 'Jane')"" }
-
然后通过cmd或Powershell(或任何其他命令行工具)运行以下命令。
npm run happy-birthday -- Danny
这将打印:
丹尼生日快乐,很多回报!
注意:如果您只是运行以下命令,即不传递参数:
npm run happy-birthday
它将打印默认名称:
简生日快乐,许多回报!
说明:
-
npm 脚本利用 nodejs 命令行选项
-e
来评估内联 JavaScript,如下所示:console.log('Happy birthday %s and many returns!', process.argv[1] || 'Jane')
-
通过 CLI 传递的参数,例如
Danny
,使用process.argv
读取 - 我们引用索引 1 处的 Array 元素。 -
逻辑 OR 运算符,即
||
用于在未传递参数时返回Jane
。
>编辑:改为设置环境变量或者,可以考虑设置环境变量并在 npm 脚本中引用它。
在 npm 脚本中,定义
happy-birthday
npm 脚本,如下所示:"happy-birthday": "echo Happy birthday %NAME% and many returns!"
请注意,Windows 仅用于引用变量的
%NAME%
表示法。使用 cmd
使用 cmd(即命令提示符)时,您需要运行以下命令:
set NAME=Danny&& npm run happy-birthday
使用Powershell
使用Powershell时,需要改为运行以下命令:
$env:NAME="Danny" ; npm run happy-birthday
注意:npm 用于 npm 脚本的默认 shell 在*nix上sh
,在 Windows 上cmd
。因此,步骤 1 和 2 中定义的上述方法将在*nix平台上失败。
如果需要跨平台支持,并且您确实希望采用这种设置环境变量并通过 npm 脚本引用它们的方法,请考虑使用 cross-env 包。