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:
{
    ...
    "takes-args": "somemodule",
    "calls-takes-args": "npm run takes-args --"
}
Notice the -- at the end of calls-takes-args.
Anything you pass after the -- is directly appended onto the script you are running. When you run npm run calls-takes-args -- -env dev, that is the equivalent of running npm run takes-args -env dev. Of course, that does not work.
If you add the -- to calls-takes-args, when you run npm run calls-takes-args -- -env dev, npm run runs npm 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 run 
npm run calls-takes-args -- -- -env dev
That will run somemodule -env dev.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With