将值从 cmd 传递到 npm 脚本
Pass values from cmd to npm script
我已经搜索了几天,但没有找到解决我的问题的答案。
我想在 Windows 中通过 cmd 或 Powershell 运行 一个 npm 脚本并传递脚本变量的值。
我想要 package.json
:
中的波纹管脚本
"scripts": {
"happy-birthday": "echo Happy birthday $NAME and many returns!"
}
要输出:
丹尼和许多人生日快乐returns!
使用如下命令:
npm run happy-birthday --NAME=Danny
到目前为止我测试的一切都给我:
$NAME 和许多 returns!
生日快乐
感觉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
这将打印:
Happy birthday Danny and many returns!
注意:如果你只是运行下面的命令,即不传递参数:
npm run happy-birthday
它将打印默认名称:
Happy birthday Jane and many returns!
解释:
npm 脚本利用 nodejs 命令行选项 -e
评估内联 JavaScript 如下:
console.log('Happy birthday %s and many returns!', process.argv[1] || 'Jane')
通过 CLI 传递的参数,例如Danny
,使用 process.argv
读取 - 由此我们引用索引 1 处的数组元素。
Logical OR Operator,即。 ||
在没有传递参数时用于 return 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
使用电源shell
使用 Powershell 时,您需要 运行 以下命令:
$env:NAME="Danny" ; npm run happy-birthday
注意: npm 用于 npm 脚本的默认 shell 在 *nix 上是 sh
并且cmd
在 windows 上。因此,上述步骤 1 和 2 中定义的方法将在 *nix 平台上失败。
如果需要跨平台支持并且您确实希望采用这种设置环境变量并通过 npm 脚本引用它们的方法,请考虑使用 cross-env 包。
我已经搜索了几天,但没有找到解决我的问题的答案。
我想在 Windows 中通过 cmd 或 Powershell 运行 一个 npm 脚本并传递脚本变量的值。
我想要 package.json
:
"scripts": {
"happy-birthday": "echo Happy birthday $NAME and many returns!"
}
要输出:
丹尼和许多人生日快乐returns!
使用如下命令:
npm run happy-birthday --NAME=Danny
到目前为止我测试的一切都给我:
$NAME 和许多 returns!
生日快乐感觉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
这将打印:
Happy birthday Danny and many returns!
注意:如果你只是运行下面的命令,即不传递参数:
npm run happy-birthday
它将打印默认名称:
Happy birthday Jane and many returns!
解释:
npm 脚本利用 nodejs 命令行选项
-e
评估内联 JavaScript 如下:console.log('Happy birthday %s and many returns!', process.argv[1] || 'Jane')
通过 CLI 传递的参数,例如
Danny
,使用process.argv
读取 - 由此我们引用索引 1 处的数组元素。Logical OR Operator,即。
||
在没有传递参数时用于 returnJane
。
编辑:改为设置环境变量
或者可能要考虑设置环境变量并在 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
使用电源shell
使用 Powershell 时,您需要 运行 以下命令:
$env:NAME="Danny" ; npm run happy-birthday
注意: npm 用于 npm 脚本的默认 shell 在 *nix 上是 sh
并且cmd
在 windows 上。因此,上述步骤 1 和 2 中定义的方法将在 *nix 平台上失败。
如果需要跨平台支持并且您确实希望采用这种设置环境变量并通过 npm 脚本引用它们的方法,请考虑使用 cross-env 包。