Почему 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