Контекст
У меня есть SPA, использующий webpack, vueJS и Workbox.В сервис-работнике у меня есть следующие строки ():
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
(например).Поэтому, когда клиент использует работника сервиса, он предварительно кэширует файл 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({})
],
})
)