#Что означает ошибка и когда она возникает
Когда ESM-файл переименовали из .js в .mjs (или перенесли в другой каталог), относительный путь в import() часто остался прежним. В обычном загрузчике ES-модулей Node.js относительные пути должны точно указывать расширение файла. Эта инструкция посвящена изменённому имени файла, а не отсутствующей npm-зависимости.
#Как отличить возможные причины
| Возможная причина | Как узнать | Что делать |
|---|---|---|
Импорт ссылается на старое расширениеВ коде import ... from "./helper.js", а файл уже называется helper.mjs. | ERR_MODULE_NOT_FOUND содержит URL или путь с helper.js, которого нет. | Исправить расширение в строке импорта. |
| Изменился регистр букв или папкаНа Linux пути чувствительны к регистру, относительный путь считается от файла, где записан import. | Локально на Windows запуск есть, в Linux-контейнере импорт не найден. | Проверить физический путь и регистр каждого сегмента. |
| TypeScript или сборщик скрывает различияРедактор/сборщик преобразует пути; прямой запуск в Node.js работает иначе. | Через сборщик приложение запускается, а команда node напрямую — нет. | Проверить итоговые файлы и настройки сборки вместо установки пакета заново. |
#Пошаговая диагностика и устранение
- Снимите точный путь из сообщения об ошибкеОткройте папку проекта в редакторе и запустите файл тем же способом, что вызывает ошибку: например,
node main.mjs. Скопируйте строкуERR_MODULE_NOT_FOUNDи полеurlили путь к файлу; если там имя пакета без./, проверьте npm-зависимости отдельно. - Посмотрите содержимое реальной папкиВ левой панели VS Code («Проводник») раскройте каталог, где лежит импортируемый файл. Проверьте точное имя:
helper.mjs,helper.jsилиhelper.cjs; система может скрывать расширение, но VS Code его показывает. Убедитесь, что файл действительно находится рядом с main.mjs, а не в соседней папке. - Проверьте команду запуска и версию Node.jsВ терминале проекта выполните
node --version; затемnode main.mjs. Для .mjs в обычном Node.js не требуетсяtype: module. Если Node.js запускает скомпилированный файл в dist, проверяйте пути относительно dist, а не только папки src. - Найдите все ссылки на старое расширениеНажмите Ctrl+Shift+F в VS Code, введите
helper.js(либо имя из сообщения) и просмотрите совпадения. Не делайте безусловную массовую замену: импорт в другой каталог или внешний сборщик могут требовать отдельных путей. - Исправьте относительный import с указанием расширенияВ main.mjs замените
import helper from "./helper.js"наimport helper from "./helper.mjs", если рядом действительно есть helper.mjs с экспортом по умолчанию. При именованном экспорте используйтеimport { helper } .... В ESM Node.js не рассчитывайте на автоматическое добавление .js или поиск index.js при прямом относительном импорте. - Проверяйте регистр имени при работе в LinuxЕсли импорт всё ещё не найден, сопоставьте буквы каждого имени:
Helpersиhelpers— разные папки в Linux. В терминале Unix можно выполнитьls -laв нужном каталоге; на Windows посмотреть точный регистр в VS Code. Переименовывайте только конкретный файл, обновляя все его обращения, а не весь каталог проекта. - Перезапустите именно тот процесс, который использует файлПосле сохранения закройте прежний локальный процесс через Ctrl+C в его терминале; запустите
node main.mjsзаново. В режиме разработки с автоматическим слежением за файлами дождитесь повторного запуска, а в контейнере убедитесь, что образ пересобран и не использует старую копию. - Выполните проверку и откатОжидаемый вывод учебного примера —
Модуль найден, код выхода 0. Если появляетсяdoes not provide an export named, файл найден, но тип импорта не совпадает с экспортом — исправьте имя экспорта отдельно. Для отката восстановите исходные имена и строки импорта по Git/резервной копии; не очищайте node_modules без причины. - Дополнительная команда по темеLinux · Терминал (Bash)КомандаОткрыть терминал в папке учебных файлов; замените main.mjs фактической точкой входа для своего проекта.
node --versionnode main.mjs
#Минимальный пример и проверка на тестовом проекте
export default function helper() {
return "Модуль найден";
}import helper from "./helper.mjs";
console.log(helper());#Проверка результата и действия при неуспехе
Команда node main.mjs завершилась без ошибки, напечатала «Модуль найден». Если ошибка сохраняется, сопоставьте именно URL из стека с файловой системой и содержимым итогового каталога сборки, а затем проверьте права на чтение.