使用多个命令将命令行参数传递给npm'pre'脚本和脚本

Fra*_*ser 8 node.js npm npm-scripts

有没有办法将命令行参数传递给npm'pre'脚本或运行多个命令的脚本?

假设一个简单的脚本mySexyScript.js只是注销process.argv:

console.log(process.argv);
Run Code Online (Sandbox Code Playgroud)

这有效

使用npm脚本:

...
"scripts": {
    ....
    "sexyscript": "node mySexyScript.js"
    ....
}
...
Run Code Online (Sandbox Code Playgroud)

运行:

npm run sexyscript -- --foo=bar
Run Code Online (Sandbox Code Playgroud)

参数按预期记录到控制台.

'pre'脚本 - 这不起作用

使用npm脚本:

...
"scripts": {
    ....
    "presexyscript": "node mySexyScript.js"
    "sexyscript": "node mySuperSexyScript.js"
    ....
}
...
Run Code Online (Sandbox Code Playgroud)

运行:

npm run sexyscript -- --foo=bar
Run Code Online (Sandbox Code Playgroud)

参数不会传递给mySexyScript,也不会记录它们

多个命令 - 这也不起作用

使用npm脚本:

...
"scripts": {
    ....
    "sexyscript": "node mySexyScript.js && node mySuperSexyScript.js"
    ....
}
...
Run Code Online (Sandbox Code Playgroud)

运行:

npm run sexyscript -- --foo=bar
Run Code Online (Sandbox Code Playgroud)

参数不会传递给mySexyScript,也不会记录它们

Rya*_*Zim 5

无法以您描述的方式传递 args。

假设一个package.json

...
"scripts": {
    ....
    "somescript": "node one.js && node two.js"
    ....
}
...
Run Code Online (Sandbox Code Playgroud)

跑步:

npm run somescript -- --foo=bar
Run Code Online (Sandbox Code Playgroud)

基本上只是运行

node one.js && node two.js --foo=bar
Run Code Online (Sandbox Code Playgroud)

在默认系统外壳上(通常为bashcmd.exe)。

npm实际上对 shell 运算符(即&&)一无所知,因此它无法将 args 传递给两个脚本。