将值从 cmd 传递到 npm 脚本



我已经搜索了几天,但没有找到适合我问题的答案。

我想通过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 脚本的中间,参数只能传递到它们的末尾。有关进一步的解释,请参阅此处的回答。

根据您的示例,请考虑以下解决方案,该解决方案将在所有平台上成功运行:

  1. package.json文件中,定义happy-birthdaynpm 脚本,如下所示:

    "scripts": {
    "happy-birthday": "node -e "console.log('Happy birthday %s and many returns!', process.argv[1] || 'Jane')""
    }
    
  2. 然后通过cmdPowershell(或任何其他命令行工具)运行以下命令。

    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 脚本中引用它。

  1. 在 npm 脚本中,定义happy-birthdaynpm 脚本,如下所示:

    "happy-birthday": "echo Happy birthday %NAME% and many returns!"
    

    请注意,Windows 仅用于引用变量的%NAME%表示法。

  2. 使用 cmd

    使用 cmd(即命令提示符)时,您需要运行以下命令:

    set NAME=Danny&& npm run happy-birthday
    

    使用Powershell

    使用Powershell时,需要改为运行以下命令:

    $env:NAME="Danny" ; npm run happy-birthday
    

注意:npm 用于 npm 脚本的默认 shell 在*nixsh,在 Windows 上cmd。因此,步骤 1 和 2 中定义的上述方法将在*nix平台上失败。

如果需要跨平台支持,并且您确实希望采用这种设置环境变量并通过 npm 脚本引用它们的方法,请考虑使用 cross-env 包。

最新更新