PWA 的 Lighthouse 评分为什么总是卡在安装提示上?
我用 Lighthouse 测了一个 PWA 项目,其他项都绿了,就“可安装”这一项一直过不去,提示“没有有效的 manifest 或 service worker”。但我明明加了 manifest.json 和注册了 SW 啊!
而且我还特意检查了 manifest 里的 start_url 和 display 配置,也配了 icons。CSS 里也用了 viewport 设置,像这样:
@viewport {
width: device-width;
}
body {
margin: 0;
font-family: sans-serif;
}
#app {
min-height: 100vh;
}
到底是哪里漏了?Lighthouse 到底要看到什么才肯给“可安装”打勾?
首先,Lighthouse 在判断一个网站是否可安装时,主要会检查以下几个方面:
1. 是否有一个有效的 Web App Manifest 文件。
2. Manifest 文件是否包含了必要的字段,比如 name, short_name, start_url, display, 和至少一个图标。
3. 网站是否通过 HTTPS 提供服务。
4. 是否有一个有效的 Service Worker,并且这个 Service Worker 能够成功注册并激活。
你提到 manifest.json 和 Service Worker 都已经添加了,但还是没过,我们逐一检查一下可能的问题点。
检查 manifest.json 文件
确保你的 manifest.json 文件格式正确并且包含了所有必要的字段。比如:
注意
start_url必须是一个有效的相对路径或者绝对 URL。另外,图标文件要确保存在并且路径正确。确保通过 HTTPS 提供服务
Lighthouse 要求 PWA 必须通过 HTTPS 提供服务。如果你本地测试,可以忽略这一点,但部署到线上环境时一定要确保使用 HTTPS。
检查 Service Worker 注册与激活
确保你的 Service Worker 正确注册并且能够成功激活。通常在 main.js 或者 app.js 中会有类似这样的代码:
这段代码会在页面加载完成后尝试注册 service-worker.js 文件。需要注意的是,Service Worker 文件必须放置在根目录下,或者在 manifest.json 中指定的作用域内。
检查 Service Worker 内容
Service Worker 文件本身也需要正确配置。一个简单的例子如下:
这段代码会在安装事件中缓存一些基本资源,并且在 fetch 事件中尝试从缓存中获取资源,如果没有找到再从网络请求。
最后一步:清除浏览器缓存
有时候浏览器缓存会导致 Lighthouse 读取旧的数据。尝试清除浏览器缓存,或者使用无痕模式重新测试。
通过以上步骤,应该能解决大部分“可安装”检查不通过的问题。如果还是有问题,可以提供更多的错误信息或者代码片段,进一步诊断。