Как передать аргумент командной строки вложенному скрипту?
Примечание: речь идет не об отправке 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 ответ:
Ваше поле
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
.