【问题标题】:NPM run script pass argument from one script to anotherNPM 运行脚本将参数从一个脚本传递到另一个脚本
【发布时间】:2016-06-08 23:22:27
【问题描述】:

这是我的 npm package.json scripts:

"scripts": {
  "method1": "./somScript $1",
  "method2": "webpack-dev-server",
  "runBoth": "npm run method1 $1 & npm run method2"
},

我希望能够运行npm run runBoth someArgument,它会传递给runBoth,然后传递给method1

但是,我上面的代码不起作用。请指教!

【问题讨论】:

标签: javascript node.js npm


【解决方案1】:

不,很遗憾,这是不可能的,因为 NPM 会附加参数。

你正在执行:npm run method1 & npm run method2 "someArgument"

所以,我猜你的输出如下:

[nodejs@mean test]$ npm run runBoth someArgument

> *@0.0.1 runBoth /data/nodejs/node_projects/test
> npm run method1 $1 & npm run method2  "someArgument"


> *@0.0.1 method1 /data/nodejs/node_projects/test
> ./somScript

[somScript] argument:

> *@0.0.1 method2 /data/nodejs/node_projects/test
> ./script2.sh "someArgument"

now executing script2.sh using arg: someArgument
[nodejs@mean test]$

另外请注意,参数应该使用“--”传递,如下所示:

[nodejs@mean test]$ npm run runBoth -- someArgument

> *@0.0.1 runBoth /data/nodejs/node_projects/test
> npm run method1 $1 & npm run method2  "someArgument"


> *@0.0.1 method1 /data/nodejs/node_projects/test
> ./somScript

[somScript] argument:

> *@0.0.1 method2 /data/nodejs/node_projects/test
> ./script2.sh "someArgument"

now executing script2.sh using arg: someArgument
[nodejs@mean test]$

但在您的情况下,预期的输出将是相同的。

我的 package.json:

  "scripts" : {
    "method1": "./somScript",
    "method2": "./script2.sh",
    "runBoth": "npm run method1 $1 & npm run method2 "
  }

您应该尝试其他实现(如导出/使用环境变量或其他)

这是一个可能的解决方法:

package.json:

  "scripts" : {
    "method1": "./somScript",
    "method2": "./script2.sh",
    "runBoth": "npm run method1 $1 & npm run method2 ",
    "runBoth2": "./alternative.sh"
  }

其中 runBoth2 执行“alternative.sh”为:

[nodejs@mean test]$ cat alternative.sh
npm run method1 $1 & npm run method2

以及预期的输出:

[nodejs@mean test]$ npm run runBoth2 -- someArgument

> *@0.0.1 runBoth2 /data/nodejs/node_projects/test
> ./alternative.sh "someArgument"


> *@0.0.1 method1 /data/nodejs/node_projects/test
> ./somScript "someArgument"

[somScript] argument: someArgument

> *@0.0.1 method2 /data/nodejs/node_projects/test
> ./script2.sh

now executing script2.sh using arg:
[nodejs@mean test]$

问候

【讨论】:

    最近更新 更多