Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Змінні середовища». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Змінні середовища** - це пари "ключ-значення", що зберігаються в операційній системі й доступні через `process.env`; їх використовують, щоб не тримати конфігурацію (порти, ключі, паролі) прямо в коді. **Ключове:** для локальної розробки значення зазвичай тримають у файлі `.env` і підключають пакетом `dotenv`, а сам `.env` ніколи не комітять у репозиторій.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## 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`, щоб код лишався універсальним, безпечним і незалежним від середовища запуску.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.