Чому NODE_ENV=beta це помилка?TL;DR; NODE_ENV=production ENV=beta
🇺🇸
English version at dev.toНагадую, що третій фактор
TwelveFactor App твердить: "Зберігайте конфігурацію в середовищі виконання." Ім'я змінної NODE_ENV каже, що вона визначає Node.js оточення, а не вашої програми.
Приклади, як змінюється поведінка JavaScript екосистеми при NODE_ENV=production
- команда npm install не встановлює devDepencencies
- express.js кешує шаблони та css
- Apollo Server вимикає інтроспекцію схеми
Ви не повинні використовувати NODE_ENV для визначення імені вашого середовища. Але яку змінну використовувати замість NODE_ENV? Відповідь залежить від того, чи будете ви використовувати префікс для змінних, пов’язаних із бізнес-логікою. Такі змінні є feature flags, тобто визначають бізнес-логіку.
Приклад із префіксом FOO:
FOO_ENV=betaFOO_FEATURE_FLAG=onПриклад без префікса:
ENV=betaFEATURE_FLAG=onПовернемося до NODE_ENV. Зазвичай вона має одне з таких значень:
– development – використовується, якщо не визначено явно. Встановіть це значення під час розробки на вашому комп’ютері.
– test – такі тестові фреймворки, як Jest, автоматично встановлюють це значення.
– production – використовуйте це значення під час виконання коду на сервері
Десятий фактор —
Dev/prod parity. Тому треба використання NODE_ENV=production у кожному бізнес-середовищі. Dockerfile є найпростішим місцем для цього. Просто додайте
ENV NODE_ENV=production