Skip to main content
Практика завдань

Як працювати з змінними середовища в 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 dotenv
ini
# .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
  1. Ніколи не комітіть файли .env до системи контролю версій
  2. Ніколи не логуйте process.env (може розкрити секрети)
  3. Використовуйте менеджер секретів у продакшні (AWS Secrets Manager, Vault тощо)
  4. Надати .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

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.

Дочитали статтю?
Практика завдань