语境
我有一个使用 webpack、vueJS 和 Workbox 的 SPA。在服务人员中,我有以下几行():
workbox.precaching.precache([
'/index.html'
])
workbox.routing.registerNavigationRoute('/index.html', {
blacklist: [
/.*\.css/,
/.*\.(?:png|jpg|jpeg|svg|gif)/,
/.*\.(?:js|woff|woff2|otf|ttf)(?:$|\?)/
]
})
问题
首次构建应用程序时,该app.js
文件现在被命名app.xxxxxxxx.js
(例如)。因此,当客户端使用 service worker 时,它会预先缓存index.html
包含以下行的文件:
<script type=text/javascript src=/js/app.xxxxxxxx.js></script>
当我更新应用程序并重建它时,该app.js
文件将被命名app.yyyyyyyy.js
,但客户端仍然index.html
使用旧app.xxxxxxxx.js
文件缓存该文件,因此该应用程序将无法工作(显然......)
预期行为
服务工作者似乎index.html
使用 CacheFirst 策略获取预缓存文件。我想如果它使用 NetworkFirst 策略它会起作用。
有可能吗?
- 编辑 -
我忘了精确:每个.js
文件都使用 NetworkFirst 策略进行缓存:
workbox.routing.registerRoute(
/.*\.(?:js|woff|woff2|otf|ttf)(?:$|\?)/,
workbox.strategies.networkFirst({
cacheName: 'assets-cache',
plugins: [
new workbox.expiration.Plugin({})
],
})
)