我正在尝试使用 create-react-app 中的服务工作者,但我不断收到...不会注册 sw.当前环境:开发 [英] I'm trying to make use of the service worker in create-react-app but I keep getting...wont register sw. Current env: development
问题描述
我正在使用 create-react-app 但 service worker 不工作.我使用本地主机
我正在尝试使其成为 PWA,我正在使用创建反应应用程序时生成的库存清单文件和服务工作者,我还 rand npm run-script 构建并获得了生成的服务工作者.js 文件.问题是我一直在控制台中得到这个.不会注册 sw.当前环境:开发帮助?
window.addEventListener("load", () => {const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;如果(isLocalhost){//这是在本地主机上运行的.让我们检查是否有 service worker仍然存在与否.checkValidServiceWorker(swUrl, config);//向本地主机添加一些额外的日志记录,将开发人员指向这//服务工作者/PWA 文档.navigator.serviceWorker.ready.then(() => {控制台.日志(此网络应用程序由服务缓存优先" +工人.要了解更多");});} 别的 {//不是本地主机.只需注册服务工作者registerValidSW(swUrl, config);}});} 别的 {console.log("不会注册 sw.当前环境:", process.env.NODE_ENV);}}
步骤如下:
第 1 步:需要在 public 文件夹中创建一个新的 JavaScript 文件:svcWorker.js.在其中添加以下代码:
var CACHE_NAME = 'task-manager-pwa';var urlsToCache = ['/','/完全的'];//安装服务工作者self.addEventListener('安装', 事件 => {//执行安装步骤事件.等待直到(caches.open(CACHE_NAME).then(函数(缓存){console.log('缓存打开');返回 cache.addAll(urlsToCache);}));});//缓存并返回请求self.addEventListener('fetch', event => {event.respondWith(caches.match(event.request).then(功能(响应){//当缓存被命中时返回响应如果(响应){返回响应;}返回 fetch(event.request);}));});//更新服务工作者self.addEventListener('激活', 事件 => {var cacheWhitelist = ['task-manager-pwa'];事件.等待直到(caches.keys().then(cacheNames => {返回 Promise.all(cacheNames.map(cacheName => {if (cacheWhitelist.indexOf(cacheName) === -1) {返回 caches.delete(cacheName);}}));}));});
第 2 步:对 index.html 文件进行更改,以检查客户端浏览器是否支持 Service Worker,以及应用程序是否呈现样式并正常工作,而没有任何 JavaScript 加载痕迹.在 <style> 之间添加了用于此的代码.</style>
和 标签.这是 index.html 中的完整代码:
<html lang="zh-cn"><头><meta charset="utf-8"/><link rel="快捷图标" href="%PUBLIC_URL%/favicon.ico"/><元名称=视口"内容=宽度=设备宽度,初始比例= 1"/><meta name="theme-color" content="#000000"/><元名称=说明"content="使用 create-react-app 创建的网站"/><link rel="apple-touch-icon" href="logo512.png"/><link rel="manifest" href="%PUBLIC_URL%/manifest.json"/><title>React PWA 应用</title><style type="text/css">身体 {边距:0;填充:0;字体系列:无衬线;}.导航栏{背景色:#4169e1;}.navbar h3 {显示:内联块;文本对齐:左;填充:10px;颜色:黑色;文字装饰:无;}.navbar {显示:内联块;填充:10px;颜色:#fff;文字装饰:无;}.page-info {填充:10px;}.当前的 {颜色:#2e8b57;}.完全的 {颜色:#ff6347;文字装饰:行进;}</风格>头部><身体><noscript>启用 JavaScript 以运行此应用程序.</noscript><div id="root"><div class="navbar"><h3>任务管理器</h3><a href="/">当前任务</a><a href="/completed">已完成的任务</a>
<p class="页面信息">应用加载中...</p>
<脚本>如果(导航器中的'serviceWorker'){window.addEventListener('load', function() {navigator.serviceWorker.register('svcWorker.js').then(function(registration) {console.log('worker 注册成功', registration.scope);}, 函数(错误){console.log('工人注册失败', err);}).catch(函数(错误){控制台日志(错误);});});} 别的 {console.log('您的浏览器不支持 Service Worker.');}