Переменная среды предоставляет информацию о среде, в которой выполняется процесс. Они настраивают порты сервера и подключения к базе данных, скрывают конфиденциальные данные, такие как ключи API, и многое другое.
Способ чтения переменных среды NestJS отличается от стандартного пакета NodeJS dotenv.
Модуль конфигурации NestJS позволяет вам управлять переменными среды всего за несколько шагов.
Шаг 1: Установка зависимостей
NestJS предоставляет выделенный @nestjs/config пакет, использующий дотенв пакет под капотом. Этот пакет с нулевой зависимостью загружает переменные среды из .env файл в процесс.env. Объект process.env — это глобальная переменная, внедряемая во время выполнения для использования вашим приложением.
Установите пакет конфигурации NestJS, запустив:
установка нпм @nestjs/config
Пакет конфигурации NestJS работает, предоставляя приложению модуль конфигурации и службу конфигурации. Модуль конфигурации указывает .env подать заявку на чтение. В то же время служба конфигурации предоставляет информацию внутри .env файл к остальной части приложения.
Шаг 2: Создание файлов ENV
Хранение переменных среды в файле позволяет легко получить к ним доступ с любого языка, в разных ОС. Вы можете управлять версиями этих .env файлов, поэтому они повышают переносимость проекта и облегчают отладку.
Подход NestJS к созданию файлов .env отличается от официальной рекомендации dotenv. Согласно документации dotenv, в приложении не следует создавать более одного файла .env. NestJS позволяет создавать несколько файлов .env с разными именами.
В качестве хорошей практики вы всегда должны создавать файлы .env в корневом каталоге вашего проекта и включать их в свой .gitignore файл.
Не существует специального способа создать файл .env — просто создайте и отредактируйте их в обычном текстовом редакторе, но они должны начинаться с .env. Например, .env.девелопмент.
Шаг 3: Настройка модуля конфигурации
Следуйте шагу ниже, чтобы настроить модуль конфигурации глобально и указать .env пути:
- В корневом модуле вашего проекта (app.modue.ts) файл, импорт Конфигурационный модуль из @nestjs/config.
- Добавлять Конфигурационный модуль на ваш импорт массив и вызвать forRoot метод на нем.
- Передать объект конфигурации в forRoot метод, с глобальный собственность на истинный. Эта опция разделяет конфигурацию с другими модулями в вашем приложении, а это означает, что вам не придется настраивать ее более одного раза.
- Укажите ваш envFilePath в вашем объекте конфигурации. Это свойство может быть либо строкой (если она у вас есть .env файл) или массив, содержащий все ваши .env files и сообщит модулю конфигурации, какие файлы искать.
// app.module.ts
@Модуль({
импорт: [
Конфигурационный модуль.forRoot({
глобальный: истинный,
envFilePath: 'Имя (имена) вашего .env файла (ов)',
}),
Шаг 4. Использование службы конфигурации для чтения переменных среды
Чтобы получить доступ к значениям конфигурации, начните с импорта КонфигСервис из @nestjs/config. Ввести его в конструктор класса объявив частный переменная и присвоение КонфигСервис как его тип.
Например:
конструктор(частная конфигурация: ConfigService) {}
Чтобы получить доступ к переменной, вызовите получить метод на КонфигСервис на вашей частный переменная. Передайте ему тип данных, который вам требуется в качестве универсального, и имя переменной среды, к которой вы хотите получить доступ.
Например:
const envVar = this.config.get<нить>('ENV_VALUE');
КонфигСервис ищет значение с именем «ENV_VALUE» и возвращает его значение.
Обратите внимание, что если два .env файлы содержат одно и то же имя свойства, первое из которых указано в envFilePath будет иметь приоритет.
Важность переменных среды
Переменные среды являются неотъемлемой частью программы, особенно в более сложных приложениях. Они позволяют вам управлять конфигурацией вашей программы с помощью простого для понимания общего механизма.
Вы можете использовать переменные среды для управления всеми аспектами конфигурации. От различных настроек базы данных до конфиденциальных данных, таких как ключи API и учетные данные, они позволяют изменять конфигурацию, не касаясь базового исходного кода.