Я не могу preache с рабочей коробкой - PullRequest
0 голосов
/ 04 июня 2019

Я не могу выполнить предварительное кэширование с помощью workbox.

Теперь я пытаюсь кэшировать в режиме injectManifest на рабочем месте.

Подтверждено, что работает кэш времени выполнения, описанный в файле, указанном swSrc..

Однако файлы, названные с помощью globDirectory и globPatterns, не кэшируются.В частности, указание globPatterns: ['** / *. {Js, css, html, png}'] приводит к ошибке.

Скажите, пожалуйста, как избавиться от этой ошибки.

workbox использует workbox-build.

Ниже показана каждая версия.

workbox-build: 3.6.3 node: 11.11

Работает на локальном хосте.

injectManifest.js

const workboxBuild = require('workbox-build');

async function injectManifest() {
  try {
    await workboxBuild
      .injectManifest({
        globDirectory: DIST_PUBLIC,
        globPatterns: ['**/*.{js,css,html,png}'],
        swSrc: path.join(DIST_PUBLIC, 'sw.template.js'),
        swDest: path.join(DIST_PUBLIC, 'sw.js'),
      })
      .then(() => {
        console.log('Service worker has been generated.');
      });
  } catch (e) {
    console.log(e);
  }
}

injectManifest();

sw.template.js

importScripts('https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js');

if (workbox) {
  console.log(`Yay! Workbox is loaded ?`);
  workbox.core.skipWaiting();
  workbox.routing.registerRoute(new RegExp('.*.*'), new workbox.strategies.staleWhileRevalidate());
} else {
  console.log(`Boo! Workbox didn't load ?`);
}

Ошибка

AssertionError [ERR_ASSERTION]: Unable to find a place to inject the manifest. Please ensure that your service worker file contains the following:/(\.precacheAndRoute\()\s*\[\s*\]\s*(\)|,)/
    at Object._callee$ (/Users/hoge/web/node_modules/workbox-build/build/entry-points/inject-manifest.js:82:13)
    at tryCatch (/Users/hoge/web/node_modules/babel-runtime/node_modules/regenerator-runtime/runtime.js:62:40)
    at Generator.invoke [as _invoke] (/Users/hoge/web/node_modules/babel-runtime/node_modules/regenerator-runtime/runtime.js:296:22)
    at Generator.prototype.(anonymous function) [as next] (/Users/hoge/web/node_modules/babel-runtime/node_modules/regenerator-runtime/runtime.js:114:21)
    at step (/Users/hoge/web/node_modules/babel-runtime/helpers/asyncToGenerator.js:17:30)
    at /Users/hoge/web/node_modules/babel-runtime/helpers/asyncToGenerator.js:28:13

Скажите, пожалуйста, как избавиться от этой ошибки.

1 Ответ

0 голосов
/ 06 июня 2019

Эта ошибка указывает на то, что injectManifest не знает, куда добавить список ресурсов для предварительного кэширования в вашем сервисном работнике.

Цитирование документации :

Когда запущено рабочее окно injectManifest, оно ищет определенную строку (precaching.precacheAndRoute([]) по умолчанию) в вашем исходном рабочем файле службы.Он заменяет пустой массив списком URL-адресов для предварительного кэширования и записывает рабочий файл сервиса в его место назначения, основываясь на параметрах конфигурации в config.js.Остальная часть кода в вашем исходном сервисном работнике остается нетронутой.

Так что, скорее всего, все, что вам нужно сделать, чтобы избавиться от этой ошибки, это добавить ожидаемую строку в шаблон сервисного работника:

importScripts('https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js');

if (workbox) {
  console.log(`Yay! Workbox is loaded ?`);
  workbox.core.skipWaiting();
  workbox.precaching.precacheAndRoute([]); // URLs to precache injected by workbox build
  workbox.routing.registerRoute(new RegExp('.*.*'), new workbox.strategies.staleWhileRevalidate());
} else {
  console.log(`Boo! Workbox didn't load ?`);
}
...