Я не могу зарегистрировать своего сервисного работника с помощью VUE - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь создать PWA с помощью VUE.

При попытке зарегистрировать работника службы я делаю это в файле main.js следующим образом:

main.js

import Vue from 'vue'
import App from './App.vue'
import router from './router'

Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

const prod = process.env.NODE_ENV === 'production';
const swLocation = '../public/sw-config.js';

if (
  prod &&
  ('https:' === location.protocol || location.host.match(/(localhost|127.0.0.1)/)) &&
  navigator.serviceWorker
) {
  navigator.serviceWorker.register(swLocation).catch( error => console.log)
  console.log('sw register');
}

Как вы можете видеть, мой файл рабочего сервиса называется sw-config.js, который находится в общей папке на том же уровне, что и index.html.

Но в момент выполнения npm запустите build и выполните это с локального сервера с помощью npm http-server Я получаю сообщение через консоль: "sw register" Но также следующие ошибки:

При получении сценария получен неверный код ответа HTTP (404).Не удалось загрузить ресурс: net :: ERR_INVALID_RESPONSE

Я также заметил, что эта ошибка не отображается в консоли при первом запуске приложения, но при перезагрузке - при запуске.

Я попытался исправить это, очистив всех зарегистрированных сервисных работников, чтобы убедиться, что это ошибка, но она не работает, это код, который я использовал в консоли Chrome:

navigator.serviceWorker.getRegistrations().then(function(registrations) { for(let registration of registrations) { registration.unregister() } })

В Chrome Developer Tools у меня есть это:

Chrome => Dev Tools => Приложение => Сервисные работники => Обновление при перезагрузке (выбрано)

Я не знаю, как избежать этой ошибки вконсоль, кто-нибудь может мне помочь?

Спасибо!

Errors on Console

1 Ответ

0 голосов
/ 19 ноября 2018

Все в папке public находится в корневой папке приложения после сборки.

Таким образом, ваш URL должен быть: const swLocation = '/sw-config.js';

...