Node.js включает встроенную поддержку файлов .env¶
С недавним выпуском версии 20.6.0 в Node.js появилась встроенная поддержка файлов .env
. Теперь вы можете загружать переменные окружения из .env
-файла в process.env
в своем Node.js-приложении, полностью избавившись от зависимостей.
Загрузка файла .env
теперь осуществляется просто:
1 |
|
Что такое .env
?¶
Файлы .env
используются для настройки переменных окружения, которые будут присутствовать в работающем приложении. Идея заимствована из методологии Twelve-Factor App, которая гласит, что все, что может меняться между деплоями (например, dev, staging, production), должно храниться в окружении.
Конфигурация не должна быть частью кода приложения и не должна регистрироваться в системе контроля версий. Такие вещи, как учетные данные API или другие секреты, должны храниться отдельно и загружаться в то окружение, в котором они необходимы. Файл .env
позволяет управлять конфигурацией приложений, для которых нецелесообразно задавать переменные в окружении, например, на машине разработки или в CI.
Существуют библиотеки на многих языках, поддерживающие использование .env
-файла для загрузки переменных в окружение, они обычно называются "dotenv", и Node.js dotenv ничем не отличается от них. Но теперь и сам Node.js поддерживает такое поведение.
Как использовать .env в Node.js?¶
Файл .env
выглядит следующим образом:
1 2 3 |
|
По традиции вы сохраняете этот файл под именем .env
в корне проекта, хотя можете назвать его как угодно.
Затем вы можете установить переменные в этом файле в качестве переменных окружения, запустив Node.js с флагом --env-file
, указывающим на ваш файл .env
. После загрузки переменные будут доступны как свойства process.env
.
1 2 3 4 5 6 7 8 9 |
|
Поддерживаемые возможности¶
На данный момент поддержка достаточно базовая по сравнению с dotenv. Например:
- В настоящее время нельзя использовать многострочные значения
- Нельзя использовать расширение переменных
-
Вы можете указать только один файл за раз. Node.js будет использовать только последний переданный флаг, поэтому в следующем примере будут использованы только переменные из
.env.development
:1
node --env-file .env --env-file .env.development
Работа еще продолжается, и некоторые из этих функций могут быть добавлены. За ходом обсуждения можно следить на GitHub.
Некорректные возможности¶
Начиная с версии 20.6.0, в документации сказано: "Если одна и та же переменная определена в окружении и в файле, то приоритет имеет значение из окружения". Именно так по умолчанию работают все пакеты dotenv. Однако в настоящее время в реализации Node.js это не так, и переменные в файле .env
будут переопределять переменные окружения. У меня есть открытый запрос на исправление этого.
Преимущества реализации Node.js¶
Несмотря на то, что в данной реализации отсутствуют некоторые возможности, она имеет ряд преимуществ по сравнению с использованием сторонних пакетов. Node.js загружает и анализирует файл .env
при запуске, поэтому в него можно включить переменные окружения, которые конфигурируют сам Node.js, например NODE_OPTIONS
.
Таким образом, можно иметь файл .env
, который выглядит следующим образом:
1 |
|
Тогда при запуске node --env-file=.env
процесс будет запускаться без выдачи предупреждений и активизирует инспектора на IP-адресе 127.0.0.1:9229
.
Замечание: нельзя помещать NODE_OPTIONS="--env-file .env"
в файл .env
. Это запрещено во избежание бесконечных циклов.
Node.js продолжает совершенствоваться¶
Попробуйте использовать Node.js версии 20.6.0! В 20-й версии появились новые возможности, такие как стабильная программа запуска тестов, имитация таймеров, поддержка файлов .env
, а также множество других обновлений, исправлений и улучшений. Версия 20 станет активной LTS-версией Node.js в октябре, поэтому сейчас самое время протестировать эти новые возможности и начать рассматривать возможность обновления своих приложений, чтобы воспользоваться ими.