使用sw-precache在dynamicUrlToDependencies中缓存没有明确声明的URL

时间:2018-11-26 17:21:07

标签: service-worker sw-precache

有没有一种方法可以使用sw-precache来缓存当前正在使用的url,而无需在dynamicUrlToDependencies中准确指定url字符串?当我提供特定的相对URL /dynamic/url-circle时,我的页面会缓存,但如果我仅提供/,则页面不会缓存。我假设发生这种情况是因为我的网址是http://localhost:3000/dynamic/url-circle,而不仅仅是http://localhost:3000/。我需要使用它来处理任何url字符串,因为我不知道dynamic/之后的确切url(例如/dynamic/url-triangle/dynamic/url-square)。 dynamicUrlToDependencies是否要使用任何抽象或字符串模式?还是我可以使用其他解决方案?

例如:

    dynamicUrlToDependencies: {
       '/dynamic/url-circle': [ 'public/dist/css/dynamic.css', 'public/dist/js/dynamic.js' ],
       '/': [ 'public/dist/css/dynamic.css', 'public/dist/js/dynamic.js' ],
  },

这是我的Gruntfile中的sw-precache设置:

   const rootDir = 'public'

   const config = {
       cacheId: version,
       handleFetch: true,
       logger: grunt.log.writeln,
       staticFileGlobs: [
         `${rootDir}/dist/js/*.{css,js}`,
         `${rootDir}/dist/css/*.{css,js}`,
         `${rootDir}/dist/offline.html`,
       ],
       dynamicUrlToDependencies: {
          '/dynamic/url-circle': [ 'public/dist/css/dynamic.css', 'public/dist/js/dynamic.js' ],
          '/': [ 'public/dist/css/dynamic.css', 'public/dist/js/dynamic.js' ],
       },
       stripPrefix: `${rootDir}/`,
       directoryIndex: 'dist/offline.html',
       navigateFallback: 'dist/offline.html',
       verbose: true,
       maximumFileSizeToCacheInBytes: 15 * 1024 * 1024, // 15MB
   };

1 个答案:

答案 0 :(得分:0)

您可以使用runtimeCaching来缓存页面。我做了这样的事情。

  runtimeCaching: [
      urlPattern: /\/url-lot\//,
      handler: 'networkFirst',
    },
  ]

,然后将缓存其中每个带有url-lot的网址。 现在感觉有点明显,但这就是生活。