【发布时间】:2020-12-22 04:46:00
【问题描述】:
我决定尝试使用 workbox,但我看到的所有指南都在谈论与 react 制作的 service worker 集成。
但是当我安装 CRA 时,我不再得到为我制作的服务人员。我需要做什么才能在此处集成工作箱?
这是我当前的代码:
App.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import swDev from './swDev'
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root')
);
swDev()
swDev.js
export default function swDev(){
let swURL = `${process.env.PUBLIC_URL}/sw.js`;
if('serviceWorker' in navigator){
navigator.serviceWorker.register(swURL).then(res => {
console.log('Service worker has been registered');
}).catch(err => console.log('Service worker was not registered'))
}
}
那么这是公共文件中的服务工作者
const cacheVersion = 'v1'
self.addEventListener('install', ()=>{
console.log('Service worker has been installed');
})
self.addEventListener('activate', ()=>{
console.log('Service worker is being activated');
})
self.addEventListener('fetch',(e)=>{
e.respondWith(handleRequest(e.request))
// function to update the cache
// updateCache(e.request)
})
async function handleRequest(req){
const cache = await caches.open(cacheVersion)
const cacheRes = await cache.match(req)
if(cacheRes){
return cacheRes;
}else{
const netRes = await fetch(req);
console.log(netRes);
if(netRes.ok){
return netRes;
}else{
// return an error message or something by matching it to a 404 page
return netRes;
}
}
}
async function updateCache(req){
if(navigator.onLine){
const res = await fetch(req);
const cache = await caches.open(cacheVersion);
if(res.ok){
// add the response to the caches and return the response
await cache.put(req, res.clone())
}
}
}
【问题讨论】:
标签: reactjs service-worker workbox workbox-webpack-plugin