На этой странице

В Node.js нет разницы между development и production, то есть нет каких-то особых настроек, которые нужно применить, чтобы Node.js заработал в production-конфигурации. Тем не менее ряд библиотек из реестра npm ориентируется на переменную NODE_ENV и по умолчанию считает её равной development. Всегда запускайте Node.js с установленной NODE_ENV=production.

Популярный подход к конфигурации приложения — методология двенадцати факторов (twelve factor).

Окружение (environment) — это цифровая платформа или система, где инженеры могут собирать, тестировать, деплоить и сопровождать программные продукты. Условно выделяют четыре стадии, или типа, окружений, в которых работает наше приложение:

  • Development (разработка)
  • Testing (тестирование)
  • Staging (предпродакшен)
  • Production (продакшен)

Фундаментальная проблема NODE_ENV возникает, когда разработчики завязывают оптимизации и поведение программы на окружение, в котором она работает. В результате появляется код вроде такого:

if (process.env.NODE_ENV === 'development') {
  // ...
}

if (process.env.NODE_ENV === 'production') {
  // ...
}

if (['production', 'staging'].includes(process.env.NODE_ENV)) {
  // ...
}

Выглядит вроде бы безобидно, но из-за этого окружения production и staging начинают отличаться, а значит, надёжное тестирование становится невозможным. Например, тест — и, соответственно, некая функциональность вашего продукта — может проходить при NODE_ENV, равном development, но падать при NODE_ENV, равном production. Поэтому устанавливать NODE_ENV в любое значение, кроме production, считается антипаттерном.