NOTE: This is NOT about sending args to the top-level script, but to the script called by that script
In my package.json, when I call a script that takes command line args directly, it works. But when I call a script that calls that other script, it's not passing the command line args to it. How do i pass them?
{
...
"takes-args": "somemodule",
"calls-takes-args": "npm run takes-args"
}
When i run the below command, the args come through:
npm run takes-args -- -env dev
But when I run it through the other script, it never gets the args. Is there some way to pass them down? Maybe by a variable marker like a dollar sign?
//The top-level script gets the args, BUT takes-args does NOT
npm run calls-takes-args -- -env dev
Is there any way?
Your
scripts
field should look like this:Notice the
--
at the end ofcalls-takes-args
.Anything you pass after the
--
is directly appended onto the script you are running. When you runnpm run calls-takes-args -- -env dev
, that is the equivalent of runningnpm run takes-args -env dev
. Of course, that does not work.If you add the
--
tocalls-takes-args
, when you runnpm run calls-takes-args -- -env dev
,npm run
runsnpm run takes-args -- -env dev
. Success!If you don't pass any args to
calls-takes-args
, the trailing--
won't hurt.Edit:
If you can't/don't want to modify your
package.json
, you can runThat will run
somemodule -env dev
.