Змінні середовища
1. Що таке змінні середовища
Змінні середовища - це пари "ключ-значення", які зберігаються в операційній системі і доступні будь-якому процесу, який ви запустите.
Вони потрібні, щоб не тримати конфігурацію всередині коду (особливо чутливі дані).
Приклад у Linux / macOS:
export NODE_ENV=production
export PORT=3000Приклад у Windows PowerShell:
$env:NODE_ENV="development"
$env:PORT="8080"Після цього змінні доступні всім процесам, запущеним із цієї сесії.
2. Як отримати змінні середовища в Node.js
Node.js надає глобальний об'єкт process.env, який містить усі змінні середовища:
console.log(process.env.NODE_ENV); // 'production'
console.log(process.env.PORT); // '3000'Якщо змінної немає - undefined:
console.log(process.env.API_KEY); // undefined3. Як задавати змінні під час запуску
Можна задати змінні прямо в команді запуску.
Linux / macOS:
NODE_ENV=production PORT=8080 node app.jsWindows (cmd.exe):
set NODE_ENV=production && set PORT=8080 && node app.jsWindows (PowerShell):
$env:NODE_ENV="production"; $env:PORT="8080"; node app.js4. Використання змінних у коді
Зазвичай їх використовують для налаштування застосунку:
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
NODE_ENV=development
PORT=4000
API_KEY=12345-ABCDE
DB_URL=postgres://user:pass@localhost/dbВстановлення пакета:
npm install dotenvПідключення в коді:
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
NODE_ENV=production
PORT=8080
API_KEY=abc123app.js
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');
}Запуск
node app.jsВивід:
ENV: production
API KEY: abc123
PORT: 8080
Running in production mode8. Де застосовуються змінні середовища
| Сфера | Приклади |
|---|---|
| Налаштування сервера | 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:
ENV NODE_ENV=production
ENV PORT=8080або в docker-compose.yml:
environment:
- NODE_ENV=production
- PORT=8080Node.js усередині контейнера так само отримає їх через process.env.
11. Коротке резюме
| Пункт | Опис |
|---|---|
| Що це | Ключі й значення, визначені в середовищі процесу |
| Доступ | process.env.VARIABLE |
| Задання | Через export / set / .env |
| Бібліотека | dotenv для локальних файлів |
| Мета | Безпечна й гнучка конфігурація застосунку |
| Важливо | Не зберігати .env у репозиторії |
Одним реченням:
Змінні середовища - це спосіб передавати в Node.js зовнішні параметри конфігурації (режим, порти, ключі, паролі тощо) через
process.env, щоб код лишався універсальним, безпечним і незалежним від середовища запуску.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.