Як працювати з змінними середовища в Node.js?
Змінні середовища в Node.js
Змінні середовища — це пари ключ-значення, доступні процесу під час виконання, які використовуються для налаштування додатків без жорсткого кодування секретів, URL-адрес або налаштувань у вихідному коді.
Доступ до змінних середовища
js
// process.env містить всі змінні середовища
console.log(process.env.NODE_ENV); // 'production', 'development', 'test'
console.log(process.env.PORT); // '3000'
console.log(process.env.DB_URL); // 'postgresql://...'Усі значення process.env є рядками — перетворіть, якщо потрібно:
js
const port = parseInt(process.env.PORT || '3000', 10);
const debug = process.env.DEBUG === 'true';Встановлення змінних
У терміналі
bash
# В рядку (одна команда)
PORT=4000 node server.js
# Експорт для сесії
export NODE_ENV=production
node server.js
# Windows (cmd)
set NODE_ENV=production && node server.js
# Windows (PowerShell)
$env:NODE_ENV="production"; node server.jsФайли .env з dotenv
Для локальної розробки використовуйте файл .env з пакетом dotenv:
bash
npm install dotenvini
# .env — НІКОЛИ не комітіть цей файл!
PORT=3000
NODE_ENV=development
DATABASE_URL=postgresql://user:password@localhost:5432/mydb
JWT_SECRET=super-secret-key
OPENAI_API_KEY=sk-...js
// Завантажте на самому початку вашого вхідного файлу
require('dotenv').config();
// або
import 'dotenv/config';
console.log(process.env.DATABASE_URL); // працює!Кілька файлів .env
bash
.env # за замовчуванням (спільні не-секрети)
.env.local # локальні переопределення (gitignored)
.env.development # специфічні для розробки
.env.production # специфічні для продакшну
.env.test # специфічні для тестуванняjs
dotenv.config({ path: `.env.${process.env.NODE_ENV}` });Валідація з Joi / Zod
Завжди перевіряйте обов'язкові змінні середовища під час запуску:
js
const { z } = require('zod');
const envSchema = z.object({
NODE_ENV: z.enum(['development', 'production', 'test']),
PORT: z.string().transform(Number).default('3000'),
DATABASE_URL: z.string().url(),
JWT_SECRET: z.string().min(32),
});
const env = envSchema.parse(process.env);
// Викидає помилку під час запуску, якщо обов'язкові змінні відсутні ✅Найкращі практики безпеки
bash
# .gitignore — завжди виключайте:
.env
.env.local
.env.*.local- Ніколи не комітіть файли
.envдо системи контролю версій - Ніколи не логуйте
process.env(може розкрити секрети) - Використовуйте менеджер секретів у продакшні (AWS Secrets Manager, Vault тощо)
- Надати
.env.exampleз заповнювальними значеннями для введення в курс справи
ini
# .env.example — безпечно комітити, без реальних значень
PORT=3000
NODE_ENV=development
DATABASE_URL=postgresql://user:password@localhost:5432/dbname
JWT_SECRET=your-secret-hereВбудована підтримка .env у Node.js 20.6+
bash
# Не потрібно dotenv у Node.js 20.6+!
node --env-file=.env server.jsРезюме
Змінні середовища зберігають конфігурацію поза кодом. Використовуйте process.env для їх читання, dotenv для завантаження файлів .env локально, завжди перевіряйте обов'язкові змінні під час запуску та ніколи не комітіть секрети у вашому репозиторії.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.