我无法让我的 Angular5 Service Worker 工作。我有两个主要问题:
- Service Worker 不会缓存用作背景图像的资产图像
- 模拟网络断开连接后,服务工作人员最初从缓存中提取文件(上述非缓存文件除外),但在第二次刷新后会遇到错误。
以下是我的问题的更详细报告。您可以通过克隆我为突出显示此问题而制作的存储库来进行操作here. https://github.com/osa10928/test-angular5-serviceWorker
我使用提供的 --service-worker 标签创建了应用程序。然后我确保 Angular 文档中列出的 5 个步骤here https://angular.io/guide/service-worker-getting-started遵循,即:
- 添加了 Service Worker 包。
- angular-cli.json 将 service-worker 设置为 true
- Service Worker 被导入并注册到 app.module.ts 中
- ngsw-config.json 是按照文档中所述生成和配置的。
- 运行 ng build --prod 在应用程序的 dist 文件夹中生成捆绑包。
我使用 node/express 和 server.js 文档为我的应用程序提供服务。当我在隐身窗口中打开应用程序时(按照文档的建议),我看到我的服务工作线程已注册,并且缓存存储了我的包和索引文件。它还缓存 img 标记中使用的图像,但它不缓存我的 css 背景图像中指定的图像。当我通过选中 Service Worker 上的离线框来模拟网络问题,然后刷新页面时,页面会正确显示除需要背景图像的部分之外的所有内容。
但是,当我第二次刷新应用程序或打开另一个选项卡时,就会出现最后/主要问题(在同一个隐身窗口上,因此服务工作线程仍处于注册状态并且缓存仍处于活动状态)。此时我什么也没有显示。控制台给了我三个错误:
- GET http://localhost:3000/favicon.ico http://localhost:3000/favicon.ico网络::ERR_INTERNET_DISCONNECTED
- 获取脚本时发生未知错误。
- 无法加载资源:net::ERR_INTERNET_DISCONNECTED
最后一个错误来自 ngsw-worker.js。我不太确定如何处理这些错误。我想也许一个新的服务人员正在尝试注册,但我不确定为什么会发生这种情况......
这是我要求的 ng-config.json 文件:
{
"index": "/index.html",
"assetGroups": [{
"name": "app",
"installMode": "prefetch",
"resources": {
"files": [
"/favicon.ico",
"/index.html"
],
"versionedFiles": [
"/*.bundle.css",
"/*.bundle.js",
"/*.chunk.js"
]
}
}, {
"name": "assets",
"installMode": "lazy",
"updateMode": "prefetch",
"resources": {
"files": [
"/assets/**"
]
}
}]
}
任何对此的帮助将不胜感激!谢谢大家
Update
所以我注意到,当我在没有运行服务器的情况下访问 localhost:3000 时,我收到错误:
Uncaught (in promise) Error: Response not Ok (fetchAndCacheOnce): request for http://localhost:3000/assets/images/background-silver-grainy.jpg returned response 504 Gateway Timeout
我也收到错误:
Failed to load resource: the server responded with a status of 504 (Gateway Timeout)
来自我所有的资源
Update2
我一直在使用节点测试这个项目来提供一个快速应用程序,该应用程序将所有请求定向到位于 dist 文件夹中的角度应用程序(在运行 ng build --prod 后生成)。我决定在一个简单的 http 服务器上测试它。我还发现直接重新加载会破坏我的服务工作人员,但如果我导航到另一个页面,然后返回到原始页面,服务工作人员就会工作(很奇怪,但与这个问题无关)。
但我仍然无法让服务人员与快递一起工作......