将值从cmd传递到npm脚本

问题描述 投票:1回答:1

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

我想通过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

powershell npm cmd npm-scripts
1个回答
0
投票

您不能将参数传递给npm脚本的中间,参数只能传递给它们的末尾。有关更多说明,请参见我的答案here

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

  1. 在您的package.json文件中,如下定义您的happy-birthday npm脚本:

    "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
    

    它将打印默认名称:

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

  1. 在您的npm脚本中,如下定义您的|| npm脚本:

    Jane

    Windows仅用于引用变量的happy-birthday表示法。

  2. 使用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包。

© www.soinside.com 2019 - 2024. All rights reserved.