#Что означает ошибка
error: The engine "node" is incompatible with this module. Expected version ">=18"
Ошибка The engine "node" is incompatible with this module. Expected version ">=18" (Yarn) или предупреждение npm WARN EBADENGINE означает, что версия Node.js не удовлетворяет полю engines в package.json проекта или зависимости. Это защита от некорректной сборки.
Нужно переключиться на подходящую версию Node, а не отключать проверку.
Для этого удобен менеджер версий.
Проект требует другую версию Node.js, чем установлена. Установите нужную версию через менеджер версий (nvm, fnm) или обновите Node.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Старая версия Node | Node старее минимальной версии, заданной в engines | Выберите поддерживаемый релиз в границах диапазона. |
| Слишком новая версия | Установленный Node новее максимального поддерживаемого диапазоном | Используйте подходящий поддерживаемый релиз либо обновите проект. |
| Несколько установок Node | В IDE и обычном терминале работают разные node.exe | Сверьте фактический путь исполняемого файла и версию. |
| Указано в engines | Версия ограничена самим проектом или зависимостью | Откройте package.json и проверьте точный диапазон engines. |
#Пошаговое решение
- Проверьте версии node и npmОткройте терминал в каталоге проекта: VS Code → «Терминал» → «Новый терминал», Windows PowerShell или терминал Linux/macOS. Выполните
node --versionиnpm --version(для Yarn дополнительноyarn --version). Сравните версию Node с диапазоном в точном сообщенииExpected version/EBADENGINE; нужно учитывать не только главный номер, но и минимальный выпуск. Еслиnodeне найден, сначала установите поддерживаемый выпуск Node.js согласно документам проекта. - Прочитайте engines в package.jsonОткройте
package.jsonредактором и найдитеengines.node; проверьте.nvmrc/.node-version, если есть. Например,>=20 <23означает Node 20–22, но не Node 23; это пример, а фактический диапазон берётся из проекта. Если несовместимость выдал пакет-зависимость, посмотрите её точное имя и версию в ошибке и требования в опубликованной документации. Не подменяйтеenginesна произвольный диапазон ради установки: это не гарантирует совместимость. - Установите менеджер версийВыберите один поддерживаемый механизм управления версиями: на Linux/macOS обычно nvm или fnm, на Windows — официальный установщик либо nvm-windows/fnm (названия и команды могут различаться). Установку менеджера проводите по официальным инструкциям, затем откройте новое окно терминала. Если в проекте уже используется
.nvmrc, в среде с nvm выполнитеnvm install, затемnvm use; иначе укажите согласованную поддерживаемую версию, напримерnvm install 22. Не устанавливайте версии со статусом «поддержка прекращена», если доступен вариант с поддержкой. - Переключитесь на нужную версиюВ новом терминале проверьте
node -vи соответствие требованиям, затемnpm -v. Если проект использует lock-файлpackage-lock.json, сделайте резервную копию нужных изменений и выполнитеnpm ciиз корня проекта: команда удаляет и заново создаёт node_modules, поэтому не запускайте её, если в папке есть вручную добавленные файлы, которые нужно сохранить. Для Yarn/pnpm используйте штатные команды своего менеджера и его lock-файл. Не удаляйтеpackage-lock.jsonкак типовое решение несовместимости движка. - Пересоздайте node_modulesПовторите исходную команду установки/сборки и убедитесь, что больше нет
EBADENGINEилиincompatible engine. Если ошибка сохраняется, проверьте, какойnodeреально используется: Windows —where.exe node, Linux/macOS —command -v node, и сравните терминал IDE с обычным. Если приложение требует версию без поддержки безопасности, согласуйте обновление самого приложения/пакетов; обход--ignore-engines/engine-strict=falseне делает старый Node совместимым. - Дополнительная команда по темеLinux · Терминал (Bash)КомандаСтроки с # — условные отдельные действия; при npm ci папка node_modules будет удалена и восстановлена.
node --versionnpm --version# При использовании nvm в правильно настроенном терминале:# nvm install# nvm use# Только при наличии package-lock.json и после проверки node_modules:# npm ci
#Диагностика
Проверьте версии: node -v и npm -v. Откройте package.json и найдите engines, а также файлы .nvmrc, .node-version, .tool-versions. Для зависимости смотрите в тексте ошибки, какой пакет требует версию. Список поддерживаемых релизов — на .
#Переключение версии
Установите менеджер: или (Linux/macOS), либо , либо Volta. Команды: nvm install и nvm use при наличии .nvmrc, либо используйте конкретный поддерживаемый диапазоном релиз. Для проекта: nvm use читает .nvmrc. После переключения пересоздайте зависимости: при наличии package-lock.json выполните npm ci после проверки, что в node_modules нет вручную сохранённых файлов; команда сама пересоздаёт этот каталог.
#Обходные пути
Для Yarn Classic: yarn install --ignore-engines (небезопасно, может сломать сборку). Для npm: npm install --engine-strict=false. Лучше обновить проект или зависимость до версии, поддерживающей ваш Node. В Docker используйте образ нужной версии (FROM node:20-alpine). В CI укажите версию через actions/setup-node.