Почему npm передает флаги строки cmd прямо в мой скрипт?

Я использую npm для запуска сборки и пытаюсь переопределить параметры конфигурации.npmrc с помощью флагов строки cmd. Однако npm настаивает на передаче этих флагов непосредственно моему сценарию, а не на чтение их в качестве параметров конфигурации, как описано в документации. Что я делаю неправильно?

Из строки cmd я пытаюсь создать пакет Tizen следующим образом:

npm run package --tizen_profile myprofile

внутри моего package.json у меня есть:

"package": "tizen package -t wgt --sign $npm_package_config_tizen_profile -- .buildResult/wgt -o .buildResult/wgt"

Результат выполнения команды:

package: `tizen package -t wgt --sign $npm_package_config_tizen_profile -- .buildResult/wgt -o .buildResult/wgt "myprofile"`

Где это должно быть:

package: `tizen package -t wgt --sign "myprofile"_tizen_profile -- .buildResult/wgt -o .buildResult/wgt`

Это похоже на то, что npm просто добавляет аргумент строки cmd к команде сценария, а не подключает его как переменную, как описано в документации: https://docs.npmjs.com/misc/config

Было ли последнее обновление npm, которое устарело и удаляет эту способность? Я только что обновился до npm 6.x, но он работал и на 5.x.

2 ответа

Решение

Я ПОНЯЛ!

Документация несовершенна, так как она не говорит вам правильный синтаксис для передачи свойств конфигурации npm. Я должен был использовать:

пакет запуска npm --mypackagename:tizen_profile="myprofile"

где mypackagename - это свойство name, используемое в package.json. Также обратите внимание, что синтаксис значения ключа --key=value, а не --key value, как описано в документации. Опять же, --key будет packagename: ключ, используя имя, указанное на верхнем уровне вашего package.json.

Вы можете попробовать переписать свой скрипт в package.json без --sign пометить как:

"package": "tizen package -t wgt -- .buildResult/wgt -o .buildResult/wgt"

а затем передать его при запуске команды npm:

npm run package -- --sign myprofile

Я предполагаю, что вы можете изменить порядок аргументов, потому что --sign myprofile теперь будет в самом конце вашей команды

ОБНОВИТЬ

вот еще один способ передать переменные и поместить их в любое место в вашей команде CLI (без использования npm config set). В моем package.json:

"aaa": "ls $myoptionalflag && $mycmd"

таким образом, я могу передать любой флаг la команда (или не передавать вообще), и я могу передать любую команду CLI как mycmd переменная. Итак, теперь я могу запустить:

myoptionalflag=-la mycmd=pwd npm run aaa

который выполнит

ls -la && pwd

или же

mycmd=pwd npm run aaa

который выполнит

ls && pwd
Другие вопросы по тегам