如何将background-sync-plugin添加到Workbox-Build

时间:2018-11-08 09:56:59

标签: node.js service-worker create-react-app progressive-web-apps workbox

我对工作箱和create-react-app v2有疑问。 我正在使用workbox-build生成自定义服务工作程序,并且注入存在问题

const backgroundSync = new workbox.backgroundSync.Plugin('ticketsQueue', {
  maxRetentionTime: 24 * 60 // Retry for max of 24 Hours
});


const buildSW = () =>
  workboxBuild.generateSW({
    globDirectory: 'build',
   // importWorkboxFrom: 'local',
    globPatterns: ['**/*.{json,ico,html,js,css,woff2,woff,png,svg}'],
    globIgnores: ['asset-manifest.json'],
    skipWaiting: true,
    clientsClaim: true,
    swDest: 'build/sw.js',
    navigateFallback: 'index.html',
    directoryIndex: 'index.html',
    runtimeCaching: [
      {
        urlPattern: new RegExp(`^${apiUrl}/tickets/create`),
        handler: 'networkOnly',
        options: {
          plugins: [
            backgroundSync
          ]
        },
        method: 'POST'
      },
     ]
  });

buildSW();

当我尝试使用nodejs执行buildSW()时,也会给出参考错误。 ReferenceError:未定义工作箱 如何包含呢?还是还有其他方法? 谢谢

2 个答案:

答案 0 :(得分:2)

有两种选择。

首先,您可以切换为使用injectManifest mode,并依靠构建工具将文件数组注入到预缓存中,从而完全控制您的服务工作者。

第二,这里有一个快捷方式options属性,可以简化后台同步插件的添加。配置看起来像这样:

runtimeCaching: [{
  // Match any same-origin request that contains 'api'.
  urlPattern: /api/,
  handler: 'networkOnly',
  options: {
    backgroundSync: {
      name: 'my-queue-name',
      options: {
        maxRetentionTime: 60 * 60,
      },
    },
  },
}]

答案 1 :(得分:0)

好吧,在使用了url模式之后,我意识到这是我犯错的地方。一种解决方法是在URL模式中,我看到创建了indexeddb队列,并且按预期开始进行后台同步。非常感谢