63

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

2
  • 1
    In that examples is not passing pipe output. Commented Feb 6, 2016 at 13:51
  • there is a simple solution NUM=1 npm run build > package.json > "build": "echo $NUM"` Commented Dec 18, 2020 at 19:43

1 Answer 1

71

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 
Sign up to request clarification or add additional context in comments.

6 Comments

This doesn't seem to work on windows machines. I get the error: 'run' is not recognized as an internal or external command, operable program or batch file
@BenSouthall Yes, 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.
I'm using Git Bash, but it still doesn't seem to work.
This throws an error for me: code ELIFECYCL; npm ERR! Exit status 1 @aleung
@incodeveritas Please first verify you script. See stackoverflow.com/questions/30744964/…
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.