javascript 向包含多个命令的npm运行脚本传递参数

j0pj023g  于 2023-03-11  发布在  Java
关注(0)|答案(5)|浏览(123)

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

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

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

efzxgjgh

efzxgjgh1#

"scripts": {
  "myscript": "a",
  "postmyscript": "b"
}
svujldwt

svujldwt2#

我发现下面的解决方案后,搜索了很多从这个讨论:
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" }
}

然后你可以访问变量如so在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

c9x0cxw0

c9x0cxw03#

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

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

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

x9ybnkn6

x9ybnkn64#

作为替代方法,这是与npm工作较少的额外设置。
但需要bash(或zsh等)。

"scripts": {
  "myscript": "bash -c 'a $@ && b $@' bash"
}

(last需要单词“bash”(但未使用),因为第一个参数设置为$0,未包括$@)

相关问题