如何在服务工作者中缓存React应用程序

时间:2019-06-03 07:18:02

标签: reactjs progressive-web-apps workbox

我正在尝试从头开始创建React PWA。到目前为止,我的项目将缩小的文件输出到dist/js文件夹中。

在我的服务工作者文件中,我正在使用Workbox来预缓存应用程序。到目前为止,这是我的设置:

importScripts("./node_modules/workbox-sw/build/workbox-sw.js");

const staticAssets = [
    "./",
    "./images/favicon.png",
]

workbox.precaching.precacheAndRoute(staticAssets);

当前,如果我从开发工具> Service Workers中启用offline,则会引发这些错误,并且应用无法加载:

3localhost/:18 GET http://localhost:8080/js/app.min.js net::ERR_INTERNET_DISCONNECTED
localhost/:1 GET http://localhost:8080/manifest.json net::ERR_INTERNET_DISCONNECTED
3:8080/manifest.json:1 GET http://localhost:8080/manifest.json net::ERR_INTERNET_DISCONNECTED
logger.mjs:44 workbox Precaching 0 files. 2 files are already cached.
5:8080/manifest.json:1 GET http://localhost:8080/manifest.json net::ERR_INTERNET_DISCONNECTED

我该如何解决?

1 个答案:

答案 0 :(得分:0)

这意味着您的资源没有得到正确的缓存, 您需要先将它们添加到缓存中才能访问, 默认情况下,工作箱会为您执行此操作。 它显示了2个缓存的文件,它们在您的数组中显示为预期结果 其余的也一样。

const staticAssets = [
    "./",
    "./images/favicon.png",
    "./js/app.min.js",
    "./manifest.json",
    { url: '/index.html', revision: '383676' }
]

您可以尝试添加事件监听器,

self.addEventListener('install', event => {
  console.log('Attempting to install service worker and cache static assets');
  event.waitUntil(
    caches.open("staticCacheName")
    .then(cache => {
      return cache.addAll(staticAssets);
    })
  );
});

self.addEventListener('fetch', function(event) {
  event.respondWith(caches.match(event.request)
  .then(function(response) {
      if (response) {
        return response;
      }
      return fetch(event.request);
    })
  );
});