我已经搜索了几天,但找不到适合我的问题的答案。
我想通过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脚本的中间,参数只能传递给它们的末尾。有关更多说明,请参见我的答案here。
给出您的示例,请考虑以下解决方案,该解决方案将在所有平台上成功运行:
在您的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
它将打印默认名称:
Jane生日快乐,很多回报!
说明:
npm脚本利用nodejs命令行选项-e
来评估嵌入式JavaScript,如下所示:
-e
通过CLI传递的参数,例如console.log('Happy birthday %s and many returns!', process.argv[1] || 'Jane')
是使用Danny
读取的-因此我们在索引1处引用Array元素。
process.argv
,即process.argv
用于在不传递任何参数时返回Logical OR Operator。
或者,可以考虑设置环境变量并在npm脚本中引用它。
在您的npm脚本中,如下定义您的||
npm脚本:
Jane
注 Windows仅用于引用变量的happy-birthday
表示法。
使用cmd
使用cmd时(即命令提示符),您需要运行以下命令:
"happy-birthday": "echo Happy birthday %NAME% and many returns!"
使用Powershell
使用Powershell时,您需要运行以下命令:
%NAME%
注: npm用于npm脚本的默认shell是* nix上的set NAME=Danny&& npm run happy-birthday
和Windows上的$env:NAME="Danny" ; npm run happy-birthday
。因此,步骤1和2中定义的上述方法将在* nix平台上失败。
如果需要跨平台支持,并且您确实希望采用这种方法来设置环境变量并通过npm脚本引用它们,那么请考虑使用sh
包。