Local Environment Parity
Цель
Проект обязан обеспечивать воспроизводимость и идентичность поведения во всех средах выполнения:
- локальная разработка
- CI
- staging
- production
Любое расхождение между локальной средой разработчика и CI считается дефектом конфигурации проекта.
Общие принципы
MUST
- Среда выполнения приложения должна быть детерминированной.
- Код, конфигурация и зависимости должны вести себя одинаково во всех окружениях.
- CI pipeline является эталонной средой выполнения проекта.
Идентичность runtime-окружения (Node.js)
MUST
- Версия Node.js строго зафиксирована и используется:
- локально
- в CI
- на staging
- на production
Допустимые способы фиксации
.tool-versions(asdf)package.json -> engines.node
✅ Пример: .tool-versions
nodejs 20.11.1
pnpm 9.12.0
✅ Пример: package.json -> engines
{
"engines": {
"node": ">=20.11.0 <21"
}
}
❌ Плохо (Node версии расходятся)
- локально: Node 18
- CI: Node 20
Результат: разные версии зависимостей/полифиллов/ESM поведения, build может "работать у одного и падать у другого".