В этой статье поговорим о переменных окружения, для чего они нужны, что такое NODE ENV (NODE_ENV), как установить переменную окружения и как это поможет настроить конфигурацию webpack.
Переменные окружения это специальные переменные, которые определяются самой операционной системой. Эти переменные используются программами во время их выполнения. Такие переменные может задавать как сама система, так и пользователь. Самой известной переменой является PATH. Чтобы найти нужные файлы в окне терминала ОС использует значение этой переменной.
Существует три вида переменной окружения:
Локальные переменные окружения
Такие переменные существуют только для текущей сессии. После завершения сессии они будут удалены. Локальные переменные не хранятся ни в каких файлах, а создаются и удаляются с помощью команд в терминале.
Пользовательские переменные окружения
Пользовательские переменные окружения задаются для каждого пользователя и загружаются когда пользователь входит в систему при помощи локального терминала или удаленно. Обычно, такие переменные хранятся в файлах конфигурации, которые хранятся в директории пользователя.
Системные переменные окружения
Это глобальные переменные, которые доступны во всей системе, для любого пользователя. Такие переменные хранятся в системных файлах конфигурации и запускаются при старте системы.
NODE ENV
У Node.js есть доступ к переменным окружения. Мы можем обратиться к глобальному объекту process и посмотреть на свойство env. Выполним команду node
в консоли. Затем команду console.log(process.env)
. видим, что свойство хранит все переменные окружения, которые использует приложение Node.js.
Свойство env объекта process и поможет нам повлиять на сборку webpack. Например, нам нужно динамически менять mode в конфигурации webpack. Для этого определим переменную ENV в webpack.config.js.
const ENV = process.env.NODE_ENV === "production" ? "production" : "development"
Теперь нам нужно задать переменную окружения NODE_ENV. Проблема в том, что в различных операционных системах переменные окружения задаются по разному. В Windows переменные окружения задаются командой SET, в Linux используется команда export, а в Mac OS команда env. Эту проблему поможет решить пакет cross-env. Он поможет определить временную переменную окружения в одном виде для всех ОС. Для этого установим пакет cross-env из npm. В файле package.json определим следующие скрипты для npm.
1 2 3 4 |
"scripts": { "prod": cross-env NODE_ENV=production webpack, "dev": cross-env NODE_ENV=development webpack } |
Таким образом, если мы запустим команду npm run dev, то в переменную ENV придёт строка «development» и у нас соберётся dev сборка. Аналогично с командой npm run prod.
Переменные окружения в отдельном файле
Если вы разрабатываете несколько приложений на Node.js и используете одинаковые переменные окружения для проектов, то можете столкнуться с такой проблемой, что переменные будут перекрывать друг друга. Что бы этого избежать нужно создать файлы конфигурации переменных окружения в каждом проекте. Обычно такие файлы называют .env. В файл записываем переменные окружения, которые понадобятся нам для разработки. Например.
1 |
ACCESS_TOKEN=ZWaZsuInm5dFmM2DQeI6dT2yOcUuibJw |
Если вы храните в переменных окружения ключи доступа или токены как в нашем примере, то обязательно добавьте этот файл в .gitignore чтобы данные переменных окружения не попали в публичный репозиторий.
Теперь необходимо прочитать переменные из файла .env и добавить их в переменные окружения. С этим нам поможет пакет из npm, который называется dotenv. Устанавливаем пакет.
npm install dotenv --save
Чтобы переменные из файла .env записались в переменные окружения нужно в начале точки входа в приложение добавить строку require(‘dotenv’).load();
. При сборке проекта переменные запишутся автоматически. Особенность данного плагина заключается в том, что он не перезаписывает уже инициализированные переменные окружения.
Заключение
Теперь вы знаете что такое NODE ENV, что как такое переменные окружения и как с их помощью управлять сборкой webpack. Надеюсь, эта статья была вам полезной.