Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Переменные окружения и .env

Переменная окружения — именованное значение, которое операционная система передаёт программе при запуске. В них хранят настройки, которые различаются на вашем компьютере и на сервере: порт, адрес базы данных, секретные ключи. Так одну и ту же программу можно запускать в разных местах, не меняя код.

process.env

Все переменные окружения лежат в объекте process.env. Значения в нём — всегда строки:

const port = Number(process.env.PORT ?? 3000);
 
console.log(`Порт: ${port}`);

Если переменная PORT не задана, выведется «Порт: 3000». Число получают через Number(), а значение по умолчанию — через ??.

Задать переменную при запуске

В bash (Linux, macOS) переменную пишут перед командой:

PORT=8080 node app.js

В PowerShell — отдельной строкой:

$env:PORT = "8080"; node app.js

В обоих случаях программа выведет «Порт: 8080».

Файл .env

Набирать переменные каждый раз неудобно, поэтому их записывают в файл .env в корне проекта — рядом с package.json:

PORT=8080
BLOG_TITLE=Блог Анны
ADMIN_PASSWORD=change-me

Node.js загрузит его, если передать флаг --env-file:

node --env-file=.env app.js

Флаг удобно сразу добавить в скрипт dev в package.json: "dev": "node --watch --env-file=.env src/server.js".

Загрузка из кода

Файл можно загрузить и из самой программы функцией process.loadEnvFile():

import { writeFile } from 'node:fs/promises';
 
await writeFile('.env', 'BLOG_TITLE=Блог Анны\nPOSTS_PER_PAGE=5\n');
 
process.loadEnvFile('.env');
 
console.log(process.env.BLOG_TITLE);            // Блог Анны
console.log(Number(process.env.POSTS_PER_PAGE)); // 5

Пример сначала создаёт .env, затем читает его. В настоящем проекте файл вы пишете сами, а в коде остаётся только process.loadEnvFile().

NODE_ENV

Многие библиотеки смотрят на переменную NODE_ENV. На сервере ей ставят значение production, и библиотеки отключают отладочные проверки:

const isProduction = process.env.NODE_ENV === 'production';
 
console.log(isProduction ? 'Боевой режим' : 'Режим разработки');

Частая ошибка

Пароли и ключи нельзя писать прямо в коде, а файл .env нельзя добавлять в Git: иначе секреты увидит каждый, у кого есть доступ к репозиторию. Добавьте .env в .gitignore, а в репозитории держите файл .env.example с названиями переменных без значений:

PORT=
BLOG_TITLE=
ADMIN_PASSWORD=

Новый участник проекта копирует его в .env и заполняет своими значениями.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.