Node.js WindowsLinuxmacOS

ERR_MODULE_NOT_FOUND после изменения расширения импортируемого файла

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

Когда ESM-файл переименовали из .js в .mjs (или перенесли в другой каталог), относительный путь в import() часто остался прежним. В обычном загрузчике ES-модулей Node.js относительные пути должны точно указывать расширение файла. Эта инструкция посвящена изменённому имени файла, а не отсутствующей npm-зависимости.

В этой статье
  1. Что означает ошибка и когда она возникает
  2. Как отличить возможные причины
  3. Пошаговая диагностика и устранение
  4. Минимальный пример и проверка на тестовом проекте
  5. Проверка результата и действия при неуспехе

#Что означает ошибка и когда она возникает

Когда 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 напрямую — нет.Проверить итоговые файлы и настройки сборки вместо установки пакета заново.

#Пошаговая диагностика и устранение

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

#Минимальный пример и проверка на тестовом проекте

Текст
Файл helper.mjs; после переименования из helper.js обновите ссылку.
export default function helper() {
  return "Модуль найден";
}
Текст
Файл main.mjs рядом с helper.mjs. Запуск node main.mjs выводит «Модуль найден».
import helper from "./helper.mjs";
console.log(helper());

#Проверка результата и действия при неуспехе

Команда node main.mjs завершилась без ошибки, напечатала «Модуль найден». Если ошибка сохраняется, сопоставьте именно URL из стека с файловой системой и содержимым итогового каталога сборки, а затем проверьте права на чтение.

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.