В 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, считается антипаттерном.