#Что происходит и как распознать неисправность
Для <script type="module"> браузер строго проверяет MIME-тип ответа. Если сервер прислал text/html, text/plain или application/octet-stream вместо JavaScript-совместимого типа (обычно text/javascript), модуль блокируется. Особенно часто HTML приходит при ошибке 404 или маршрутизации в index.html.
#Как отличить причины
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Файл не найден и вместо него HTMLСервер отдаёт страницу ошибки или SPA fallback по пути скрипта. | В ответе HTML и Content-Type text/html. | Исправьте src, каталог сборки и маршруты. |
| Не задан MIME для .mjsФайл реально существует, но сервер отдаёт text/plain или octet-stream. | Ответ содержит исходный JS, статус 200. | Настройте text/javascript для .mjs/.js. |
| Неправильный импорт из другого адресаВнутренний import указывает на HTML-страницу или файл без расширения. | Главный модуль грузится, ошибка относится к вложенному URL. | Исправьте путь импорта и настройки сборщика. |
#Пошаговая диагностика и исправление
- Найдите точный адрес отклонённого модуляОткройте страницу, нажмите F12 → «Консоль» и прочитайте полное сообщение о strict MIME type checking. Скопируйте путь проблемного файла, затем во вкладке «Сеть» (Network) найдите этот запрос. Если сообщение относится к импортированному файлу, исправляйте его, а не только src главного тега.
- Проверьте статус и реальный Content-TypeНажмите на запрос → «Заголовки» и посмотрите Status Code и Response Headers. При 404 сначала исправляйте путь, а не MIME. При статусе 200 откройте «Ответ»: если там HTML страницы, сервер выдал fallback, а не нужный JS.
- Проверьте реальное расположение сборкиОткройте в редакторе index.html и найдите
<script type="module" src="...">, а также относительныеimport "./...". Сравните регистр букв и папки с фактическими файлами на сервере. На Linux регистр имён важен:Utils.jsиutils.jsразличаются. После исправления обновите страницу с отключённым кэшем в DevTools. - Уточните тип файла, который отдаёт серверЕсли файл есть и содержит JavaScript, но Content-Type неверный, проверьте настройки раздачи статики: веб-сервер должен выдавать для
.jsи.mjsсовместимый JavaScript MIME, рекомендованныйtext/javascript. Не задавайте его для всех файлов сайта и не отключайте строгую проверку браузера. - При Nginx проверьте настройки и конфигурацию MIMEЕсли сервер на Nginx, убедитесь, что глобальный блок http подгружает
mime.types, а для используемого .mjs есть подходящее правило. Перед изменением сделайте копию конфигурации, выполнитеnginx -tв терминале администратора; только при успешном тесте применяйте перезагрузку по установленной процедуре. Если сервер чужой — передайте администратору URL и заголовки. - Отдельно проверьте SPA-маршрутизацию и проксиЕсли по адресу
/assets/app.jsотображается ваш HTML-шаблон, перенаправление всех неизвестных адресов на index.html настроено слишком широко. Добавьте обработку реально существующих статических ресурсов перед fallback. Повторите запрос к скрипту в новой вкладке и убедитесь, что возвращается код JS, а не страница сайта. - Проверьте вложенные импорты и откатПерезагрузите сайт с открытой «Сеть», проверьте, что каждый модуль получает код 200 и совместимый Content-Type, а ошибок импорта в консоли нет. Если после изменения веб-сервера стали неверно отдаваться CSS/JSON, восстановите исходную конфигурацию из копии и исправьте только соответствующее MIME-правило.
#Команды и примеры для проверки
<script type="module" src="/assets/app.js"></script>#Как проверить результат и что делать дальше
Скрипт type=module загружается без ошибки strict MIME type; все вложенные импорты получают JavaScript-код, а не HTML. Коды 404/403 и сбои сборки решайте отдельно.