我有以下工作箱配置
config.plugins.push(
new GenerateSW({
swDest: 'service-worker.js',
clientsClaim: true,
// Only cache PWA version. Excludes pre-rendered AMP pages
exclude: [/^(?!shell).*index\.html$/],
// PWA routing ie single page app
navigateFallback: '/shell/index.html',
navigateFallbackBlacklist: [
/*\.js.*/
],
}),
)
我的快递服务器没有缓存服务人员
import serve from 'serve-static'
function setHeaders(res: Response, file: string) {
let cache =
basename(file) === 'service-worker.js'
? 'private,no-cache,no-store,must-revalidate,proxy-revalidate'
: 'public,max-age=31536000,immutable'
return res.setHeader('Cache-Control', cache) // don't cache service worker file
}
app.use(serve(BUILD_LOCATION, { setHeaders }))
- 该页面的首次访问按预期工作。
service-worker.js
返回为最新版本并预缓存所有资产和shell.html
. - 刷新时,正如预期的那样,将
shell.html
提供服务而不是转到服务器,并且资产是从服务工作者提供的。 - 假设我重建资产并更新
service-worker.js
. - 我希望
service-worker.js
从服务器加载新资源,并预缓存所有新资源。
相反,我看到以下空响应
我在控制台中收到以下错误The script has an unsupported MIME type ('text/html').
所以看起来服务工作者正在服务shell/index.html
而不是去服务器service-worker.js
。为了验证这一点,我访问了view-source:https://localhost/service-worker.js
如下所示。如何阻止服务人员缓存自身。我以为这就是我正在做的navigateFallbackBlacklist