Запустите сценарии, которые устанавливают и используют переменные среды на разных платформах
Примечание: Cross-env все еще работает хорошо, но находится в режиме обслуживания. Никаких новых функций не будет добавлено, только серьезные и общие ошибки будут исправлены, и со временем они будут обновляться только с node.js. Узнать больше
Большинство подсказок команды Windows будут задыхаться, когда вы устанавливаете переменные среды с помощью NODE_ENV=production . (Исключением является избиение в Windows, в которой используется натуральный Bash.) Точно так же есть разница в том, как команды Windows и POSIX используют переменные среды. С POSIX вы используете: $ENV_VAR и в Windows, которые вы используете %ENV_VAR% .
cross-env делает это так, чтобы вы могли иметь одну команду, не беспокоясь о настройке или правильном использовании переменной среды для платформы. Просто установите его так, как если бы он работал в системе POSIX, и cross-env позаботится о том, чтобы установить его правильно.
cross-env против cross-env-shell Этот модуль распространяется через NPM, который связан с узлом и должен быть установлен в качестве одного из devDependencies :
npm install --save-dev cross-env
ПРЕДУПРЕЖДЕНИЕ! Убедитесь, что при установке пакетов вы правильно пишете, чтобы не ошибочно устанавливать вредоносные программы
ПРИМЕЧАНИЕ. Версия 7 Cross-ENV поддерживает только Node.js 10 и выше, чтобы использовать его на Node.js 8 или нижняя установка
npm install --save-dev cross-env@6
Я использую это в своих сценариях NPM:
{
"scripts" : {
"build" : " cross-env NODE_ENV=production webpack --config build/webpack.config.js "
}
} В конечном счете, команда, которая выполняется (с использованием cross-spawn ):
webpack --config build/webpack.config.js
Переменная среды NODE_ENV будет установлена cross-env
Вы можете устанавливать несколько переменных среды за раз:
{
"scripts" : {
"build" : " cross-env FIRST_ENV=one SECOND_ENV=two node ./my-program "
}
}Вы также можете разделить команду на несколько из них или отделить объявление переменных среды от фактического выполнения команды. Вы можете сделать это таким образом:
{
"scripts" : {
"parentScript" : " cross-env GREET= " Joe " npm run childScript " ,
"childScript" : " cross-env-shell " echo Hello $GREET " "
}
} Где childScript имеет фактическую команду для выполнения, а parentScript устанавливает переменные среды для использования. Затем вместо того, чтобы запустить Childscript, вы запускаете родителя. Это весьма полезно для запуска одной и той же команды с различными переменными ENV или когда переменные среды слишком длинные, чтобы иметь все в одной строке. Это также означает, что вы можете использовать синтаксис $GREET env var даже в Windows, что обычно требует, чтобы это было %GREET% .
Если вы предшествуете знаку доллара с нечетным количеством обратных сбоев, заявление выражения не будет заменено. Обратите внимание, что это означает, что отступайте после того, как произошла сэкспрессия json. "FOO=\$BAR" не будет заменен. "FOO=\\$BAR" будет заменен.
Наконец, если вы хотите передать строку JSON (например, при использовании TS-Loader), вы можете сделать следующее:
{
"scripts" : {
"test" : " cross-env TS_NODE_COMPILER_OPTIONS={ \" module \" : \" commonjs \" } node some_file.test.ts "
}
} Обратите особое внимание на тройной обратной склад (\) перед двойными кавычками (") и отсутствию отдельных кавычек (') . Оба эти условия должны быть выполнены, чтобы работать как на Windows, так и на Unix.
cross-env против cross-env-shell Модуль cross-env обнажает два бункера: cross-env и cross-env-shell . Первый из них выполняет команды, используя cross-spawn , в то время как второй использует опцию shell из spawn узела.
Основным вариантом использования для cross-env-shell является то, что вам нужна переменная среды, которая будет установлена по всему встроенному сценарию оболочки, а не только в одной команде.
Например, если вы хотите, чтобы переменная среды применима к нескольким командам последовательно, вам нужно будет обернуть их в кавычки и использовать cross-env-shell вместо cross-env .
{
"scripts" : {
"greet" : " cross-env-shell GREETING=Hi NAME=Joe " echo $GREETING && echo $NAME " "
}
} Правило эмпирического правила: если вы хотите передать в cross-env команду, которая содержит особые символы оболочки , которые вы хотите интерпретировать , то используйте cross-env-shell . В противном случае придерживайтесь cross-env .
В Windows вам нужно использовать cross-env-shell , если вы хотите обрабатывать события сигналов внутри вашей программы. Распространенный случай для этого-когда вы хотите захватить событие SIGINT , вызванное нажатием Ctrl + C на интерфейсе командной строки.
Обратите внимание, что npm использует cmd по умолчанию, и это не поддерживает замену команды, поэтому, если вы хотите использовать это, вам необходимо обновить свой .npmrc , чтобы установить script-shell на PowerShell. Узнайте больше здесь.
Первоначально я создал это, чтобы решить проблему, которую я столкнулся с моими сценариями NPM в угловой форме. Это значительно облегчило вклад в проект для пользователей Windows.
env-cmd - вместо этого считывает переменные среды из файла@naholyr/cross-env - cross-env с поддержкой настройки значений по умолчанию Хотите внести свой вклад? Ищите хороший лейбл первого выпуска.
Пожалуйста, подайте проблему для ошибок, отсутствующей документации или неожиданного поведения.
Смотрите ошибки
Этот проект находится в режиме обслуживания, и никаких новых запросов функций не будет рассмотрено.
Узнать больше
Спасибо этим людям (ключ эмодзи):
Кент С. Доддс ? | Я Чжуан ? | Джеймс Харрис | compumike08 ? | Даниэль Родригес Риверо ? | Джонас Кейнхольц ? | Хьюго Вуд ? |
Тибо Томас ? | Даниэль Рей Лопес | Амила Вэллихинда ? | Пол Беттс ? | Тернер Хейс ? | Сухас Карант | Свен |
Д. Николас Лопес Зелайя | Йохан Эрнандес | Джордан Нильсон ? | Джейсон Кук | Bibo5088 | Эрик Берри ? | Михаэль де Бои |
Лаури Эскола | Devuxer | Даниэль |
Этот проект следует за спецификацией всех контролей. Взносы любого вида приветствуются!
Примечание: это было добавлено поздно в проект. Если вы внесли свой вклад в этот проект каким -либо образом, пожалуйста, сделайте запрос на привлечение, чтобы добавить себя в список, следуя инструкциям в
CONTRIBUTING.md
Грань