You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Web App部署Vercel时嵌套路由启动失败:MIME类型不支持

Flutter Web嵌套路由在Vercel部署失败的解决思路

问题核心

访问嵌套路由(如/home/questionnaire)时,ServiceWorker被错误地尝试注册在/home/路径下而非根域名,导致注册失败,进而无法加载Flutter应用。Firebase Hosting默认适配了单页应用的路由和ServiceWorker配置,因此无此问题。

具体解决步骤

1. 手动指定ServiceWorker的根范围

修改web/index.html中的loadEntrypoint配置,强制设置ServiceWorker的scope为根路径:

window.addEventListener('load', function (ev) {
  console.log("LOAD!");
  _flutter.loader.loadEntrypoint({
    serviceWorker: {
      serviceWorkerVersion: serviceWorkerVersion,
      scope: "/" // 关键:手动指定根范围
    }
  }).then(function (engineInitializer) {
    console.log("INIT");
    return engineInitializer.initializeEngine();
  }).then(function (appRunner) {
    console.log("RUN");
    return appRunner.runApp();
  });
});

无论从哪个路由访问,ServiceWorker都会注册在根域名下,避免嵌套路由导致的范围错误。

2. 配置Vercel的单页应用重写规则

在项目根目录创建vercel.json文件,添加路由重写规则,确保所有嵌套路由请求都转发到index.html:

{
  "rewrites": [
    { "source": "/(.*)", "destination": "/index.html" }
  ]
}

Vercel默认不会自动处理单页应用的嵌套路由,该配置让所有路径请求都由Flutter入口文件处理,同时保证ServiceWorker在正确上下文加载。

3. 验证ServiceWorker文件的可访问性

部署后,在浏览器Network面板检查flutter_service_worker.js(或对应生成的ServiceWorker文件)的请求状态,确保返回200。若路径错误,需确认Flutter构建输出路径配置正确,Vercel能正常托管该文件。

4. 清理浏览器缓存与旧ServiceWorker

在浏览器开发者工具的Application面板中,删除已注册的ServiceWorker并清空缓存,再重新加载嵌套路由页面,避免旧缓存引发的异常。

内容的提问来源于stack exchange,提问作者Jonas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 11:20:29