Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing command line arguments to npm 'pre' script and script with multiple commands

Is there a way to pass command line arguments to an npm 'pre' script or to a script which runs multiple commands?

Assuming a simple script mySexyScript.js that just logs out the process.argv :

console.log(process.argv);

This works

With an npm script:

...
"scripts": {
    ....
    "sexyscript": "node mySexyScript.js"
    ....
}
...

running:

npm run sexyscript -- --foo=bar

the arguments are logged to the console as expected.

'pre' script - This doesn't work

With an npm script:

...
"scripts": {
    ....
    "presexyscript": "node mySexyScript.js"
    "sexyscript": "node mySuperSexyScript.js"
    ....
}
...

running:

npm run sexyscript -- --foo=bar

the arguments are not passed to mySexyScript and they are not logged

Multiple commands - This also doesn't work

With an npm script:

...
"scripts": {
    ....
    "sexyscript": "node mySexyScript.js && node mySuperSexyScript.js"
    ....
}
...

running:

npm run sexyscript -- --foo=bar

the arguments are not passed to mySexyScript and they are not logged

like image 450
Fraser Avatar asked Feb 27 '17 16:02

Fraser


1 Answers

There is no way to pass args in the way that you are describing.

Assuming a package.json:

...
"scripts": {
    ....
    "somescript": "node one.js && node two.js"
    ....
}
...

Running:

npm run somescript -- --foo=bar

basically just runs

node one.js && node two.js --foo=bar

on the default system shell (usually bash or cmd.exe).

npm doesn't actually know anything about shell operators (i.e. &&), so it can't pass args to both scripts.

like image 118
RyanZim Avatar answered Oct 05 '22 14:10

RyanZim