Перейти к содержанию

Node.js включает встроенную поддержку файлов .env

С недавним выпуском версии 20.6.0 в Node.js появилась встроенная поддержка файлов .env. Теперь вы можете загружать переменные окружения из .env-файла в process.env в своем Node.js-приложении, полностью избавившись от зависимостей.

Загрузка файла .env теперь осуществляется просто:

1
node --env-file .env

Что такое .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
PASSWORD=supersecret
API_KEY=84de8263ccad4d3dabba0754e3c68b7a
# .env files can have comments too

По традиции вы сохраняете этот файл под именем .env в корне проекта, хотя можете назвать его как угодно.

Затем вы можете установить переменные в этом файле в качестве переменных окружения, запустив Node.js с флагом --env-file, указывающим на ваш файл .env. После загрузки переменные будут доступны как свойства process.env.

1
2
3
4
5
6
7
8
9
$ node --env-file .env
Welcome to Node.js v20.6.0.
Type ".help" for more information.
> console.log(process.env.PASSWORD)
supersecret
undefined
> console.log(process.env.API_KEY)
84de8263ccad4d3dabba0754e3c68b7a
undefined

Поддерживаемые возможности

На данный момент поддержка достаточно базовая по сравнению с 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_OPTIONS="--no-warnings --inspect=127.0.0.1:9229"

Тогда при запуске 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 в октябре, поэтому сейчас самое время протестировать эти новые возможности и начать рассматривать возможность обновления своих приложений, чтобы воспользоваться ими.

Источник