【问题标题】:Pass an argument to an npm run script comprising multiple commands将参数传递给包含多个命令的 npm run 脚本
【发布时间】:2016-05-27 11:59:20
【问题描述】:

我想在我的 npm 脚本中将一个参数传递给两个命令中的第一个:

"scripts": {
  "myscript": "a && b"
}

当我运行npm run myscript -- --somearg=somevalue 时,参数被传递给命令b,而不是命令a。有没有办法确保第一个命令接收参数?

【问题讨论】:

  • 我认为npm 将附加参数附加到配置值(a & b + $@)而不是针对指定的每个命令。作为一种肮脏的解决方法,您可以指定一个 shell 脚本 sh <script>.sh,然后在 shell 脚本文件中指定 cmd1 -- $@ && cmd2 -- $@,它将执行多个命令。
  • this answer 用于运行跨平台的解决方案(即 Bash、Windows 命令提示符/cmd.exe 和 PowerShell 等)。
  • 也许您需要的是 prepost 脚本挂钩?文档描述,如果您添加前缀为prepost 的脚本,例如postmyscript,它将在您的脚本之后运行。但是,您的脚本是获取参数的脚本。

标签: javascript node.js npm


【解决方案1】:
"scripts": {
  "myscript": "a",
  "postmyscript": "b"
}

【讨论】:

    【解决方案2】:

    从这个讨论中搜索了很多后,我找到了以下解决方案:

    https://github.com/npm/npm/issues/9627#issuecomment-152607809

    https://github.com/npm/npm/issues/9627#issuecomment-178576802

    解决方案 1. 所以在你的包 json 中添加一个像这样的配置对象

    {
      "name": "packageName",
      "config" : { "variable1" : "value1" }
    }
    

    然后你可以像这样在windows上

    访问变量
        {
          "name": "packageName",
          "config" : { "variable1" : "value1" },
          "scripts": {
                  "myscript": "a -c %npm_package_config_variable1%  && b -c %npm_package_config_variable1%"
          }
        }
    

    我假设在 mac/linux 中(不是 100%)

    {
      "name": "packageName",
      "config" : { "variable1" : "value1" },
      "scripts": {
              "myscript": "a -c $npm_package_config_variable1  && b -c $npm_package_config_variable1"
      }
    }
    

    然后您可以通过调用脚本来覆盖变量,如下所示:

    npm run myscript --packageName:variable1=value2
    

    解决方案 2。

    不需要 package.json 中的配置条目

    {
      "name": "packageName",
      "scripts": {
              "myscript": "a -c %npm_config_variable1%  && b -c %npm_config_variable1%"
      }
    }
    

    然后这样称呼它

    npm run myscript --variable1=value2
    

    选择其中一个的原因:

    https://github.com/npm/npm/issues/9627#issuecomment-178813965

    【讨论】:

      【解决方案3】:

      这里是使用Yarn v2 "berry" 时的简单解决方案:

      "scripts": {
        "myscript": "a $@ && b $@"
      }
      

      由于 yarn berry 拥有自己的跨平台类 bash 小环境,用于在包中执行 scripts,因此它也可以跨平台工作。

      【讨论】:

        【解决方案4】:
        npm run myscript -- --foo=1 --bar=2
        

        https://docs.npmjs.com/cli/run-script

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-01-12
          • 2017-07-18
          • 1970-01-01
          • 2019-02-08
          • 1970-01-01
          • 2020-05-09
          相关资源
          最近更新 更多