Как передать аргумент командной строки вложенному скрипту?


Примечание: речь идет не об отправке args в скрипт верхнего уровня, а в скрипт, вызываемый тем скриптом

В моем пакете.json, когда я вызываю скрипт, который принимает args командной строки напрямую, он работает. Но когда я вызываю сценарий, который вызывает этот другой сценарий, он не передает ему args командной строки. Как мне их передать?

{
    ...
    "takes-args": "somemodule",
    "calls-takes-args": "npm run takes-args"
}

Когда я выполняю нижеприведенную команду, args проходят через:

npm run takes-args -- -env dev

Но когда я запускаю его через другой скрипт, он никогда не получает аргументы. Есть ли какой-нибудь способ передать их вниз? Может быть, переменным маркером, как знак доллара?

//The top-level script gets the args, BUT takes-args does NOT
npm run calls-takes-args -- -env dev
Есть ли какой-нибудь способ?
1 2

1 ответ:

Ваше поле scripts должно выглядеть так:

{
    ...
    "takes-args": "somemodule",
    "calls-takes-args": "npm run takes-args --"
}

Обратите внимание на -- в конце calls-takes-args.

Все, что вы передаете после --, непосредственно добавляется в сценарий, который вы запускаете. Когда вы запускаете npm run calls-takes-args -- -env dev, это эквивалентно запуску npm run takes-args -env dev. Конечно, это не работает.

Если вы добавляете -- к calls-takes-args, то при запуске npm run calls-takes-args -- -env dev, npm run бежит npm run takes-args -- -env dev. Успех!

Если вы не передадите args в calls-takes-args, трейлинг -- не будет ранить.


Правка:

Если вы не можете/не хотите изменять свой package.json, вы можете запустить

npm run calls-takes-args -- -- -env dev

Это будет работать somemodule -env dev.