Expo应用启动时service-worker注册失败问题求助
我之前在新环境部署Expo项目时碰到过完全一样的问题,当时没动自动生成的注册代码就解决了,给你几个靠谱的排查方向:
清除本地缓存,强制重新生成资源
新机器的缓存可能残留了错误的资源映射,导致请求service-worker.js时返回的是HTML页面(也就是MIME类型错误的核心原因)。先关掉当前的Expo服务,然后依次执行:# 清除Expo项目缓存并重启 expo r -c # 清除npm缓存 npm cache clean --force # 重新安装依赖 npm install之后再启动项目,大概率能解决路径映射的问题。
统一Expo CLI版本
旧机器和新机器的Expo CLI版本不一致,可能导致自动生成的service-worker路径或资源结构有差异。先在旧机器上执行expo --version查看版本号,然后在新机器安装对应版本:npm install -g expo-cli@x.x.x把
x.x.x替换成旧机器的版本号,之后重启项目即可。检查Expo配置文件的Web服务设置
打开项目的app.json或app.config.js,检查web字段下的serviceWorker配置,确保它是默认的正确设置,比如:"web": { "serviceWorker": { "register": true, "path": "/service-worker.js" } }不要修改这个路径,自动生成的注册代码依赖这个默认路径来加载脚本。
排查端口占用或代理干扰
19006端口被其他程序占用,或者本地代理工具(VPN、抓包工具等)干扰了请求,都可能导致服务器返回错误的页面。可以尝试:- 关闭所有代理工具,重新启动项目
- 修改Expo的开发端口,避免冲突:
expo start --port 19007
验证service-worker.js的实际存在性
启动项目后,直接在浏览器访问http://localhost:19006/service-worker.js(如果换了端口就改成对应端口)。如果返回的是HTML页面(比如404页面),说明Expo没有正确生成这个文件。这时候删除项目根目录下的.expo文件夹(Expo的本地缓存目录),然后重新启动项目,让Expo重新生成所有必要的资源文件。
这些方法都不需要修改自动生成的service-worker注册代码,我当时用清除缓存+统一CLI版本的组合就解决了问题,希望对你有帮助!
内容的提问来源于stack exchange,提问作者L Jones

