如何解决打包报错:Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of 'text/html'
最近在前端项目(如 Vite / Webpack / Vue / React 项目)中打包后部署到服务器时,浏览器控制台出现了如下报错:
Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of "text/html". Strict MIME type checking is enforced for module scripts per HTML spec.
很多同学看到这类报错第一反应可能是「JS 文件路径错误」,但实际上这个问题往往与服务器配置、路由规则、打包路径、部署目录等都有关系。
本文将带你一步步分析原因、提供多种排查思路和详细解决方案。
一、问题背景
二、错误原因解析
报错的关键在于:
'Expected a JavaScript module script but the server responded with a MIME type of text/html'
意思是:
- 浏览器期望加载的是一个 JavaScript 模块文件(.js)
- 但服务器返回的 不是 JS 文件内容,而是一个 HTML 页面
- 因为 HTML 的 MIME 类型是
text/html,浏览器拒绝将其当成 JS 模块执行
常见触发场景
| 场景 | 说明 |
|---|---|
| 1️⃣ 打包路径错误 | JS 文件路径错误,导致服务器返回 404 页面(HTML) |
| 2️⃣ 部署目录不对 | 没有正确部署 dist 目录或 build 目录 |
| 3️⃣ 服务器路由规则错误 | 前端路由(如 Vue Router、React Router)没有配置 fallback |
| 4️⃣ MIME 配置缺失 | 服务器未设置正确的 .js 文件 MIME 类型 |
5️⃣ 使用 type="module" 时访问错误 | HTML 文件引用的路径不匹配实际构建产物路径 |
三、排查步骤(逐步定位问题)
✅ 步骤 1:检查报错的 JS 文件路径
打开浏览器控制台,查看报错中的路径:
http://yourdomain.com/assets/index-xxxxx.js


