#Что означает ошибка
Error: Cannot find module 'express' code: MODULE_NOT_FOUND
Node.js не нашёл модуль, указанный в require() или import. Для пакетов из npm поиск идёт в папках node_modules вверх по дереву каталогов, для относительных путей (./file) — по файловой системе. Поэтому причины делятся на две группы: не установлена зависимость или неверный путь/запуск. Сообщение содержит имя модуля и стек Require stack, который показывает файл, откуда вызов.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Не установлены зависимостиПакет не установлен. | Нет папки node_modules. | Выполните npm install. |
| Неверный путь в require/importОпечатка, регистр, расширение. | Относительный путь неверен. | Исправьте путь. |
| Запуск из другой папкиСкрипт запущен вне проекта. | pwd не совпадает с проектом. | Перейдите в корень. |
| Повреждён node_modulesУстановка прервана. | Ошибки после обновления. | Переустановите зависимости. |
#Пошаговое решение
- Прочитайте сообщениеСкопируйте полный текст ошибки
Cannot find module '...'илиERR_MODULE_NOT_FOUNDи посмотритеRequire stackлибо путь файла, где расположенimport. Имя может обозначать пакет npm, локальный файл или встроенный модуль. Сначала проверьте опечатку:./utils.jsиutils.jsозначают разные способы импорта. Если в ошибке фигурирует один файл проекта, его не нужно ставить через npm. Зафиксируйте версию Node.js (node --version) и команду, которой запускали скрипт; для старой версии условия разрешения модулей могут отличаться. - Проверьте текущую папкуОткройте терминал редактора в корне проекта и проверьте его: в Windows PowerShell выполните
Get-Location, в Linux/macOS —pwd. Выполнитеlsилиdirи найдитеpackage.json. Если файла нет, перейдите к корню черезcd "реальный_путь". Выполнитеnode --versionиnpm --version; проверьте полеenginesи требования проекта. Если Node отсутствует в PATH либо версия не поддерживается, сначала восстановите окружение по руководству проекта, а не создавайтеpackage.jsonтам, где его не было. - Установите зависимостиЕсли не найден сторонний пакет, откройте
package.jsonи проверьте разделыdependenciesиdevDependencies. При наличии действительногоpackage-lock.json, созданного для этого проекта, в корне можно выполнитьnpm ci: команда удаляет и пересоздаётnode_modulesна основе файла блокировки. Перед запуском сохраните несохранённые локальные изменения и убедитесь, что вnode_modulesнет вручную помещённых файлов. Для проекта без согласованного lock-файла используйте документированный способ установки (например,npm install) вместо безусловного удаления зависимостей. - Установите конкретный пакетЕсли нужного внешнего пакета нет в
package.json, уточните его настоящее название и требуемую версию в документации проекта. В корне проекта выполнитеnpm install expressлишь если проект действительно используетexpress, либо замените имя официальным пакетом. Команда изменяетpackage.jsonи lock-файл; проверьтеgit diffдо фиксации. Если ошибка относится к встроенному модулю Node, не устанавливайте одноимённый сторонний пакет без проверки: возможно, проект требует более новую версию Node.js. - Проверьте путьЕсли в проблемном
requireилиimportпуть начинается с./или../, откройте импортирующий файл в редакторе и найдите строку. Проверьте существование цели относительно этого файла, регистр букв на Linux, расширение и расположение сборочного вывода. В TypeScript не пытайтесь запускать.tsобычным Node без соответствующего инструмента; путь, существующий в исходниках, может отсутствовать вdist. Сохраните исправление, выполните проектную команду сборки и повторите запуск, проверив, что резолвится именно ожидаемый файл. - Проверьте расширение и тип модуляПосмотрите поле
"type"вpackage.jsonи расширения.cjs/.mjs: режим ECMAScript-модулей и CommonJS отличается. Для относительного импорта в ESM Node обычно требует полный путь с расширением, напримерimport helper from './helper.js';require('./helper')относится к CommonJS. Не меняйте глобально"type"ради одной ошибки: это повлияет на все файлы проекта. Если ошибка связана с экспортами пакета, изучите его полеexportsи поддерживаемые точки входа в официальной документации. - Переустановите node_modulesЕсли зависимости явно повреждены и проект поддерживает npm, сначала убедитесь, что lock-файл сохранён и актуален, затем выполните один согласованный способ восстановления: обычно
npm ci. Не удаляйтеpackage-lock.jsonи не очищайте весь кеш npm без подтверждения причины; при неудаче прочитайте сообщение об ошибке установки, включая несовместимые версии и права каталога. Проверкаnpm ls --depth=0показывает проблемы верхнего уровня, но может сообщать об ожидаемых дополнительных зависимостях; сопоставьте вывод с манифестом. - Проверьте глобальные пакетыЕсли ошибку видите при вызове команды (
webpack,vite,eslint), а не приrequire, проверьте наличие скрипта вpackage.jsonи выполнитеnpm run имя_скрипталибоnpm exec -- имя_утилитысогласно документации. Глобальная установка не нужна для обычного локального проекта; она может скрыть несовместимость версий. После исправления снова запустите первоначальную команду и проверьте тесты проекта. Если сбой остаётся, приложите текст ошибки,node --version,npm --versionи список зависимостей без секретов. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
Если пакет установлен, но не находится, проверьте, что установка происходила в той же папке, откуда запускается скрипт; у монорепозиториев зависимости могут лежать в корне (workspaces). Ошибка в Docker часто означает, что node_modules не скопирован в образ или перекрыт томом. Для TypeScript проверьте, что собранные файлы находятся в dist/, а путь в package.json (main) указывает на существующий файл. Версию Node.js фиксируйте в .nvmrc, чтобы окружения совпадали. Документация — .