我想将一个参数传递到npm脚本中两个命令的第一个命令中:
"scripts": { "myscript": "a && b" }
当我运行npm run myscript -- --somearg=somevalue时,参数被传递给命令b,而不是命令a。是否有办法确保第一个命令接收参数?
npm run myscript -- --somearg=somevalue
b
a
efzxgjgh1#
"scripts": { "myscript": "a", "postmyscript": "b" }
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
c9x0cxw03#
下面是使用Yarn v2 "berry"时的简单解决方案:
"scripts": { "myscript": "a $@ && b $@" }
由于yarn berry拥有自己的类似bash的跨平台环境,用于在一个包中执行scripts,因此这也可以跨平台工作。
scripts
x9ybnkn64#
作为替代方法,这是与npm工作较少的额外设置。但需要bash(或zsh等)。
"scripts": { "myscript": "bash -c 'a $@ && b $@' bash" }
(last需要单词“bash”(但未使用),因为第一个参数设置为$0,未包括$@)
n3schb8v5#
npm run myscript -- --foo=1 --bar=2
参见https://docs.npmjs.com/cli/run-script
5条答案
按热度按时间efzxgjgh1#
svujldwt2#
我发现下面的解决方案后,搜索了很多从这个讨论:
https://github.com/npm/npm/issues/9627#issuecomment-152607809
以及
https://github.com/npm/npm/issues/9627#issuecomment-178576802
**解决方案1.**因此,在包json中添加一个配置对象,如下所示
然后你可以访问变量如so在windows上
在Mac/Linux中,我假设(不是100%)
然后你可以通过调用脚本来覆盖这个变量,如下所示:
解决方案2。
不需要package.json中的配置条目
然后这样称呼它
选择其中一个的理由:
https://github.com/npm/npm/issues/9627#issuecomment-178813965
c9x0cxw03#
下面是使用Yarn v2 "berry"时的简单解决方案:
由于yarn berry拥有自己的类似bash的跨平台环境,用于在一个包中执行
scripts
,因此这也可以跨平台工作。x9ybnkn64#
作为替代方法,这是与npm工作较少的额外设置。
但需要bash(或zsh等)。
(last需要单词“bash”(但未使用),因为第一个参数设置为$0,未包括$@)
n3schb8v5#
参见https://docs.npmjs.com/cli/run-script