Skip to main content

Змінні середовища

1. Що таке змінні середовища

Змінні середовища - це пари "ключ-значення", які зберігаються в операційній системі і доступні будь-якому процесу, який ви запустите.

Вони потрібні, щоб не тримати конфігурацію всередині коду (особливо чутливі дані).

Приклад у Linux / macOS:

javascript
export NODE_ENV=production export PORT=3000

Приклад у Windows PowerShell:

javascript
$env:NODE_ENV="development" $env:PORT="8080"

Після цього змінні доступні всім процесам, запущеним із цієї сесії.

2. Як отримати змінні середовища в Node.js

Node.js надає глобальний об'єкт process.env, який містить усі змінні середовища:

javascript
console.log(process.env.NODE_ENV); // 'production' console.log(process.env.PORT); // '3000'

Якщо змінної немає - undefined:

javascript
console.log(process.env.API_KEY); // undefined

3. Як задавати змінні під час запуску

Можна задати змінні прямо в команді запуску.

Linux / macOS:

javascript
NODE_ENV=production PORT=8080 node app.js

Windows (cmd.exe):

javascript
set NODE_ENV=production && set PORT=8080 && node app.js

Windows (PowerShell):

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

4. Використання змінних у коді

Зазвичай їх використовують для налаштування застосунку:

javascript
const PORT = process.env.PORT || 3000; const NODE_ENV = process.env.NODE_ENV || 'development'; app.listen(PORT, () => { console.log(`Server running on port ${PORT} in ${NODE_ENV} mode`); });

Якщо змінної немає - краще задавати значення за замовчуванням (fallback).

5. Робота з файлом .env (dotenv)

Зберігати змінні прямо в ОС незручно, особливо під час розробки. Тому зазвичай створюють файл .env у корені проєкту.

.env

javascript
NODE_ENV=development PORT=4000 API_KEY=12345-ABCDE DB_URL=postgres://user:pass@localhost/db

Встановлення пакета:

javascript
npm install dotenv

Підключення в коді:

javascript
import dotenv from 'dotenv'; dotenv.config(); console.log(process.env.DB_URL);

Після виклику dotenv.config() усі змінні з .env додаються в process.env.

6. Чому змінні середовища важливі

ПричинаПриклад
Розділення середовищNODE_ENV=development / production
БезпекаAPI-ключі, паролі, токени не зберігаються в коді
Гнучка конфігураціяМожна змінювати поведінку без зміни вихідників
ПортативністьОдин код працює в різних системах (dev/staging/prod)
Інтеграція з CI/CDЗмінні передаються через GitHub Actions, Docker тощо

7. Приклад повного сценарію

.env

javascript
NODE_ENV=production PORT=8080 API_KEY=abc123

app.js

javascript
import dotenv from 'dotenv'; dotenv.config(); console.log('ENV:', process.env.NODE_ENV); console.log('API KEY:', process.env.API_KEY); console.log('PORT:', process.env.PORT); if (process.env.NODE_ENV === 'production') { console.log('Running in production mode'); } else { console.log('Running in development mode'); }

Запуск

javascript
node app.js

Вивід:

javascript
ENV: production API KEY: abc123 PORT: 8080 Running in production mode

8. Де застосовуються змінні середовища

СфераПриклади
Налаштування сервераPORT, HOST, BASE_URL
БезпекаJWT_SECRET, API_KEY, DB_PASSWORD
Бази данихDATABASE_URL, MONGO_URI, REDIS_HOST
ІнтеграціїAWS_ACCESS_KEY, STRIPE_SECRET_KEY
Режим роботиNODE_ENV=development / production

9. Безпека .env

  • Не додавай .env у GitHub → додай у .gitignore:

    javascript
    .env
  • Для деплою змінні потрібно зберігати в налаштуваннях середовища (Heroku, Vercel, Docker тощо)

  • Ніколи не логуй чутливі дані (process.env.PASSWORD).

10. Змінні середовища в Docker

У Dockerfile:

javascript
ENV NODE_ENV=production ENV PORT=8080

або в docker-compose.yml:

javascript
environment: - NODE_ENV=production - PORT=8080

Node.js усередині контейнера так само отримає їх через process.env.

11. Коротке резюме

ПунктОпис
Що цеКлючі й значення, визначені в середовищі процесу
Доступprocess.env.VARIABLE
ЗаданняЧерез export / set / .env
Бібліотекаdotenv для локальних файлів
МетаБезпечна й гнучка конфігурація застосунку
ВажливоНе зберігати .env у репозиторії

Одним реченням:

Змінні середовища - це спосіб передавати в Node.js зовнішні параметри конфігурації (режим, порти, ключі, паролі тощо) через process.env, щоб код лишався універсальним, безпечним і незалежним від середовища запуску.

Коротка відповідь

Для співбесіди
Premium

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