根本原因是双击HTML文件使用file://协议打开,浏览器沙盒限制导致模块脚本被识别为text/plain;Live Server启动真实HTTP服务(如http://127.0.0.1:5500),使服务器正确返回application/javascript等MIME类型,从而解决import、fetch、.wasm加载失败等问题。

为什么浏览器报“Expected a JavaScript module script but the server responded with a MIME type of 'text/plain'”
根本原因不是代码写错了,而是你双击 HTML 文件用 file:// 协议打开的。浏览器对本地文件有严格沙盒限制:它不会执行 type="module" 的脚本,也不允许 fetch()、import 或加载 .wasm,因为这些资源在 file:// 下一律被当成 text/plain 返回——哪怕文件内容是合法 JS 或 WASM。
Live Server 是最直接有效的修复方式
它启动一个真实 HTTP 服务(默认 http://127.0.0.1:5500),让浏览器按标准规则解析响应头,正确识别 application/javascript、application/wasm 等 MIME 类型。
- 安装插件:
Live Server(作者 Ritwick Dey) - 右键你的
index.html→Open with Live Server - 确认地址栏是
http://开头,不是file:/// - 若端口被占,改
settings.json:"liveServer.settings.port": 3000
遇到 .wasm 加载失败?检查服务器是否返回 application/wasm
即使用了 Live Server,旧版本(如 0.9.x)也不认识 .wasm 后缀,会返回 text/plain。错误现象是控制台报:Failed to compile WebAssembly module: Incorrect response MIME type. Expected 'application/wasm'。
- 升级到
live-server@1.2.2+(VSCode 插件自动更新通常已覆盖) - 或换更稳妥的方案:
npx serve -s或vite(开箱即用,自动注册.wasmMIME) - 避免用
python -m http.server:它默认不设application/wasm,需额外写 handler(不推荐)
HTML 中引用了 JS 模块但没生效?确认三件事
type="module" 对路径和服务器都敏感,漏掉任一环都会退化成 text/plain。
- JS 文件必须通过
src属性引入,不能内联(<script type="module">console.log(1)</script>在某些 Live Server 版本下可能失效) - 路径必须是相对或绝对 URL,不能是
./main.js而 HTML 在子目录下却没配liveServer.settings.root - 确保文件已保存——Live Server 只响应保存事件,
files.autoSave关闭时容易忽略这点
真正容易被忽略的是:MIME 错误从来不是浏览器“故意为难”,而是你在用文件系统协议干网络协议的事。只要切到 http://,90% 的 text/plain 报错就消失了。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











