13

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

1 Answer 1

7

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.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.