Passing arguments to npm script in package.json

node.jsParametersNpmArguments

node.js Problem Overview


Is there a way to pass arguments inside of the package.json command?

My script:

"scripts": {
  "test": "node mytest.js $1 $2 | node_modules/tap-difflet/bin/tap-difflet"
}

cli npm run test 8080 production

Then on mytest.js I'd like to get the arguments with process.argv

node.js Solutions


Solution 1 - node.js

Note: It only works on shell environment, not on Windows cmd. You should use bash on Windows like Git Bash. Or try Linux subsystem if you're using win10.

Passing arguments to script

To pass arguments to npm script, you should provide them after -- for safety.

In your case, -- can be omitted. They behaves the same:

npm run test -- 8080 production
npm run test 8080 production

But when the arguments contain option(s) (e.g. -p), -- is necessary otherwise npm will parse them and treat them as npm's option.

npm run test -- 8080 -p

Use positional parameters

The arguments are just appended to the script to be run. Your $1 $2 won't be resolved. The command that npm actually runs is:

node mytest.js $1 $2 | node_modules/tap-difflet/bin/tap-difflet "8080" "production"

In order to make position variable works in npm script, wrap the command inside a shell function:

"scripts": {
  "test": "run(){ node mytest.js $1 $2 | node_modules/tap-difflet/bin/tap-difflet; }; run"
}

Or use the tool scripty and put your script in an individual file.

package.json:

"scripts": {
  "test": "scripty"
}

scripts/test:

#!/usr/bin/env sh
node mytest.js $1 $2 | node_modules/tap-difflet/bin/tap-difflet

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionEnZoView Question on Stackoverflow
Solution 1 - node.jsaleungView Answer on Stackoverflow