使用workbox-webpack-plugin配置Service Workers时,如果你的JavaScript和CSS文件托管在CDN上,并且你的HTML文件和这些静态资源文件不在同一个域名上,你需要注意以下几点来确保它们能够通过Service Worker进行缓存:

  1. 跨域请求:确保你的Service Worker能够处理跨域请求。默认情况下,Service Workers的作用域限制在它们所在的路径和同一个域中。你可能需要在CDN上允许跨域请求,通常通过CORS头(例如Access-Control-Allow-Origin)来实现。

  2. 配置Workbox来缓存外部资源:你需要在Workbox配置中通过workbox.routing来缓存和服务那些位于CDN上的资源。具体来说,可以使用workbox.routing.registerRoute来匹配CDN上的资源并应用缓存策略。

  3. 缓存策略:选择合适的缓存策略。对于CDN资源,通常会使用staleWhileRevalidate或cacheFirst策略。

示例配置:

// 在webpack配置中使用workbox-webpack-plugin
const { GenerateSW } = require('workbox-webpack-plugin');

module.exports = {
  // 其他webpack配置
  plugins: [
    new GenerateSW({
      runtimeCaching: [
        {
          urlPattern: new RegExp('https://your-cdn-domain.com/.*'),
          handler: 'StaleWhileRevalidate', // or 'CacheFirst'
        },
      ],
    }),
  ],
};
  1. 确保Service Worker被正确注册并激活:检查Service Worker的注册和激活是否已正确完成,这在你的网站代码中实现。
// 注册Service Worker
if ('serviceWorker' in navigator) {
  window.addEventListener('load', () => {
    navigator.serviceWorker.register('/service-worker.js').then(registration => {
      console.log('ServiceWorker registration successful with scope: ', registration.scope);
    }, err => {
      console.log('ServiceWorker registration failed: ', err);
    });
  });
}
  1. 调试和检查:使用浏览器的DevTools来调试你的Service Worker。检查是否Service Worker被正确启用,并确保网络请求走的是Service Worker而不是直接走网络缓存。可以在浏览器开发工具的“Application”选项卡下的“Service Workers”和“Cache Storage”中看到相关的信息。

确保这些设置完成之后,你的静态资源应该会通过Service Worker进行缓存和服务。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐