带有工作箱和 Gulp 的服务工作者,如何添加我自己的规则?

Service worker with workbox and Gulp, how to add my own rules?

我刚开始使用 workbox,我正在使用 Gulp 在示例中使用以下代码生成我的服务工作者:https://developers.google.com/web/tools/workbox/get-started/gulp

它正确地生成了 service-worker 文件,但我不明白的是如何将我自己的代码添加到文件中?假设我想添加以下路线:

workboxSW.router.registerRoute(
  'https://pixabay.com/get/(.*)',
  cacheOneWeekStrategy
);

现在,如果我再次 运行 gulp 任务,它会覆盖我自己的路线。如何添加我自己的代码?我还想添加一些事件监听器等。

更新:到目前为止,我发现我可以使用 injectManifest() 它将路由注入 workboxSW.precache([]) 内的文件;但是我仍然需要以某种方式复制实际的服务工作者脚本。

我想不出任何其他方法。这是我的解决方案。我从 node_modules 复制工作箱,然后将我的代码写入 sw.js,然后我使用 inject-manifest 将路由注入我自己的代码。

gulp.task('copy-workbox', () => {
  return gulp.src(['node_modules/workbox-sw/build/importScripts/workbox-sw.prod*.js'])
    .pipe(rename('workbox.js'))
    .pipe(gulp.dest('app'));
});

gulp.task('inject-manifest', () => {
  return wbBuild.injectManifest({
    swSrc: './app/sw.js',
    swDest: './app/service-worker.js',
    globDirectory: './app/',
    globPatterns: ['**\/*.{html,js,css,png}'],
    globIgnores: ['admin.html']
  })
  .then(() => {
    console.log('Service worker generated.');
  });
});

更新:经过一些阅读后我发现重命名工作箱不是一个好主意。但是我找不到其他方法来做到这一点。

对于早期版本的 Workbox,这是一个棘手的问题。

Workbox v3 提供了更多选项来简化此过程。

  1. 您可以使用 CDN:https://developers.google.com/web/tools/workbox/guides/get-started
  2. 要自己托管文件,您可以使用 copyWorkboxLibraries() 将文件保存到特定位置和 returns 文件路径 (More details here)