Создание сервис-воркера в vue.js с использованием injectmanifest рабочей панели дает сбой

Я пытаюсь использовать прогрессивные возможности веб-приложения vue.js, создавая настраиваемого работника службы через рабочий ящик. Каждый раз, когда я пытаюсь создать приложение, я получаю следующую ошибку: AssertionError [ERR_ASSERTION]: swSrc must be set to the path to an existing service worker file.

проект / vue.config.js:

module.exports = {
  runtimeCompiler: true,
  pwa: {
    workboxPluginMode: "InjectManifest",
    plugins: [
      new InjectManifest({
        swSrc: "src/service-worker.js"
      })
    ]
  }
};

проект / src / service-worker.js:

self.__precacheManifest = [].concat(self.__precacheManifest || []);
workbox.precaching.suppressWarnings();
workbox.precaching.precacheAndRoute(self.__precacheManifest, {});

//Web Push Notifications//
let click_open_url;
self.addEventListener("push", function(event) {
  let push_message = event.data.json();
  // push notification can send event.data.json() as well
  click_open_url = push_message.notification.data.url;
  const options = {
    body: push_message.notification.body,
    icon: push_message.notification.icon,
    image: push_message.notification.image,
    tag: "alert"
  };
  event.waitUntil(
    self.registration.showNotification(push_message.notification.title, options)
  );
});

self.addEventListener("notificationclick", function(event) {
  const clickedNotification = event.notification;
  clickedNotification.close();
  if (click_open_url) {
    const promiseChain = clients.openWindow(click_open_url);
    event.waitUntil(promiseChain);
  }
});

Я пробовал изменить форматирование на swSrc, чтобы использовать ./ или просто / и даже удалить src/, но ни один из них ничего не сделал. Я также пробовал скопировать код, сгенерированный workbox, а затем вставить его в service-worker.js, но он по-прежнему не распознает его. Как мне заставить InjectManifest распознавать мой файл сервис-воркера?


person iamnotpotter    schedule 21.03.2020    source источник


Ответы (1)


Я ответил на свой вопрос. Мне нужно было изменить project / vue.config.js на

module.exports = {
  runtimeCompiler: true,
  pwa: {
    workboxPluginMode: "InjectManifest",
    workboxOptions:{
      swSrc: "src/service-worker.js"
  }
};
person iamnotpotter    schedule 21.03.2020