如何解决Mock Service Worker脚本存在不支持的MIME类型('text/html')的问题?
我来帮你排查这个问题!你遇到的这个MIME类型错误,本质是服务器没有正确识别mockServiceWorker.js这个脚本文件,反而把它当成HTML页面返回了,所以才会显示不支持的'text/html'类型。咱们一步步来解决:
确认脚本文件的位置是否正确
你已经执行了npx msw init public,先检查项目的public文件夹里是否确实存在mockServiceWorker.js文件。如果你的项目静态资源目录不是默认的public(比如有的项目用public/static),那需要调整init命令的目标路径,比如执行npx msw init public/static,确保脚本最终能通过http://localhost:3000/mockServiceWorker.js(或者对应你的静态资源路径)访问到。验证脚本能否正常访问
打开浏览器直接访问http://localhost:3000/mockServiceWorker.js,看看页面显示的是JS代码还是404页面/项目的HTML内容。如果显示的是HTML,说明服务器没找到这个脚本文件,返回了HTML页面,这就是MIME类型错误的根源。检查开发服务器的静态资源配置
如果你用的是Create React App,默认public目录就是静态资源目录,一般没问题;但如果是自定义webpack或者其他构建工具,要确保静态资源目录配置正确。比如webpack的devServer配置里,要明确指定静态资源目录:module.exports = { devServer: { static: './public', }, };清除缓存并重启服务
浏览器缓存或者开发服务器缓存可能会干扰脚本的加载,先尝试用Ctrl+Shift+R强制刷新浏览器清除缓存,然后彻底关闭开发服务器,重新启动后再测试。排查客户端路由的拦截问题
如果你的项目用了客户端路由(比如React Router),要确保路由规则不会把/mockServiceWorker.js当成路由路径处理。比如如果有通配符路由(*),要保证这个脚本的请求不会被路由捕获,而是直接落到静态资源上。
按照上面的步骤逐一排查,最常见的问题就是文件位置不对或者服务器没正确映射静态资源,只要确认脚本能被正常访问,这个问题大概率就能解决!
备注:内容来源于stack exchange,提问作者user19625670

