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

workbox-build生成Service Worker放子目录遇缓存路径错误,求解决方案

解决方案

当然可以把service-worker.js放在src/Workbox子目录下,问题出在Workbox生成预缓存清单时的路径基准计算上:当Service Worker位于子目录时,它会默认以自身所在目录为基准解析缓存文件的相对路径,导致原本在src/根目录的文件被错误解析为src/Workbox/下的路径,从而触发404错误。

你只需要在generateSW配置中添加modifyURLPrefix修正缓存路径,同时排除生成的Service Worker文件本身避免不必要的缓存:

修改后的build.js代码

const { generateSW } = require("workbox-build");

generateSW({
    globDirectory: "../src/",
    globPatterns: ["**/*"],
    swDest: "../src/Workbox/service-worker.js",
    // 修正路径前缀:让所有缓存文件的相对路径指向src根目录
    modifyURLPrefix: {
        "": "../"
    },
    // 排除生成的service-worker.js,避免缓存自身
    globIgnores: ["Workbox/service-worker.js"]
})

原理说明

  • modifyURLPrefix: { "": "../" }会给所有预缓存的文件路径添加../前缀,这样位于src/Workbox的Service Worker就能正确找到src/根目录下的文件(比如../a.png对应实际的src/a.png)。
  • 如果你的网站部署在域名根目录(而非/src/子路径),也可以改用绝对路径彻底避免相对路径问题:
    modifyURLPrefix: {
        "": "/src/"
    }
    

修改后,index.html中的Service Worker注册代码无需改动,依然可以正常使用Workbox/service-worker.js的相对路径进行注册。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 12:46:21