Firebase Hosting无法自动加载Flutter应用最新版本求助
Flutter + Firebase Hosting 彻底移除Service Worker解决缓存问题
一、阻止Flutter构建生成Service Worker
- 方法1:修改
web/index.html,删除默认的Service Worker注册代码:
找到并移除这段代码:if ('serviceWorker' in navigator) { window.addEventListener('load', function () { navigator.serviceWorker.register('/flutter_service_worker.js'); }); } - 方法2:构建时添加参数禁用Service Worker:
执行构建命令时加上--no-service-worker:
这样输出的flutter build web --no-service-workerbuild/web目录中不会生成flutter_service_worker.js及相关缓存清单文件。
二、配置Firebase Hosting忽略Service Worker相关文件
修改firebase.json的ignore数组,确保部署时不会上传残留的Service Worker文件:
"ignore": [ "firebase.json", "**/.*", "**/node_modules/**", "flutter_service_worker.js", "asset-manifest.json" ]
三、强制用户浏览器卸载旧Service Worker
在新的web/index.html中添加以下代码,让已访问用户的浏览器自动注销旧的Service Worker:
if ('serviceWorker' in navigator) { navigator.serviceWorker.getRegistrations().then(function(registrations) { for(let registration of registrations) { registration.unregister(); } }); }
这段代码会在用户加载新版页面时,清理所有已注册的Service Worker,确保后续请求直接拉取最新资源。
四、验证缓存配置
- 确认
firebase.json中的headers规则优先级正确,/**的全局规则放在最前面,避免被其他规则覆盖。 - 部署完成后,打开浏览器开发者工具的Network标签,查看所有资源的Response Headers,确认
Cache-Control已设置为no-cache, no-store, must-revalidate。
内容的提问来源于stack exchange,提问作者bf8
相关产品推荐
相关产品推荐

