Comme cela a déjà été souligné, il s'agit davantage d'un problème de "travailleurs de service" que de "vue cli". Tout d'abord, pour être sûr que nous sommes sur la même longueur d'onde, voici ce que le contenu standard de l'application registerServiceWorker.js devrait ressembler à (vue cli 3, plugin officiel pwa) :
import { register } from 'register-service-worker'
if (process.env.NODE_ENV === 'production') {
register(`${process.env.BASE_URL}service-worker.js`, {
ready () {
console.log(
'App is being served from cache by a service worker.\n'
)
},
cached () {
console.log('Content has been cached for offline use.')
},
updated () {
console.log('New content is available; please refresh.')
},
offline () {
console.log('No internet connection found. App is running in offline mode.')
},
error (error) {
console.error('Error during service worker registration:', error)
}
})
}
Si vous n'avez pas modifié la variable BASE_URL dans votre fichier .env, elle doit correspondre à la racine de votre application Vue. Vous devez créer un fichier nommé service-worker.js dans le public (pour qu'il soit copié dans votre répertoire de sortie lors de la construction).
Maintenant, il est important de comprendre que tout le code dans la section registerServiceWorker.js est d'enregistrer un travailleur de service et de fournir quelques points d'accès à ses services. cycle de vie . Ceux-ci sont généralement utilisés à des fins de débogage et non pour programmer réellement le service worker. Vous pouvez le comprendre en remarquant que la balise registerServiceWorker.js seront regroupés dans le fichier app.js et s'exécutent dans le fil principal.
Le plugin officiel PWA de vue-cli 3 est basé sur le workbox de Google, donc pour utiliser le service worker, vous devrez d'abord créer un fichier nommé vue.config.js à la racine de votre projet et y copier le code suivant :
// vue.config.js
module.exports = {
// ...other vue-cli plugin options...
pwa: {
// configure the workbox plugin
workboxPluginMode: 'InjectManifest',
workboxOptions: {
// swSrc is required in InjectManifest mode.
swSrc: 'public/service-worker.js',
// ...other Workbox options...
}
}
}
Si vous avez déjà créé un fichier vue.config.js, il vous suffit d'ajouter l'attribut pwa à l'objet config. Ces paramètres vous permettront de créer votre service personnalisé situé à l'adresse suivante public/service-worker.js
et faire en sorte que workbox y injecte du code : le manifeste precache. Il s'agit d'un fichier .js dans lequel une liste de références à vos ressources statiques compilées est stockée dans une variable généralement appelée self.__precacheManifest
. Vous devez construire votre application en mode production afin de vous assurer que c'est bien le cas.
Comme il est généré automatiquement par workbox lorsque vous construisez en mode production, le manifeste precache est très important pour la mise en cache du shell de votre application Vue, car les ressources statiques sont généralement décomposées en morceaux au moment de la compilation et il serait très fastidieux pour vous de référencer ces morceaux dans le service worker à chaque fois que vous (re)construisez l'application.
Pour précacher les actifs statiques, vous pouvez mettre ce code au début de votre fichier service-worker.js
(vous pouvez également utiliser une instruction try/catch) :
if (workbox) {
console.log(`Workbox is loaded`);
workbox.precaching.precacheAndRoute(self.__precacheManifest);
}
else {
console.log(`Workbox didn't load`);
}
Vous pouvez ensuite continuer à programmer votre travailleur de service normalement dans le même fichier, soit en utilisant la fonction API de base du prestataire de services ou en utilisant API de la boîte à outils . Bien sûr, n'hésitez pas à combiner les deux méthodes.
J'espère que cela vous aidera !
0 votes
L'alternative que quelques personnes semblent avoir trouvée est de ne pas utiliser ce plugin et le boilerplate qu'il fournit, et de créer leur propre service worker en suivant la documentation qu'ils peuvent trouver en ligne. C'est une solution viable, mais je me suis dit que j'allais passer le week-end pour voir si ce plugin peut être utilisé de manière pratique.
1 votes
Je pense qu'il s'agit plus d'une lacune dans votre connaissance des travailleurs sociaux que d'un
vue
question connexe.1 votes
Très possible excellente observation
2 votes
J'avais le même problème avec le plugin PWA de vue-cli 3. La documentation est loin d'être idéale, vous avez raison. J'ai essayé de répondre à votre question avec toutes les connaissances que j'ai acquises en traitant ce problème. J'espère que cela vous aidera.
1 votes
Oui @LandryBETE c'est exactement ce que j'espérais. J'avais sauvegardé cet onglet lorsque j'ai vu votre réponse en septembre et je ne l'ouvre que maintenant (heureusement, mon projet professionnel ne m'a pas demandé d'aller plus loin dans le développement de la fonctionnalité PWA jusqu'à maintenant). Merci beaucoup d'avoir fourni une réponse aussi riche et détaillée qui, j'en suis sûr, va aider d'innombrables personnes.