我在 Angular 8 中有一个 PWA。我添加了$ ng add @angular/pwa
,并且 PWA 功能似乎可以工作,接受这个问题:当我将新版本推送到生产时,该应用程序是not在人们的浏览器上进行了更新(在 Chrome 和移动 Safari 上进行了测试)。
相反,当用户打开浏览器访问应用程序时,他/她将看到浏览器上之前存在的应用程序的先前(未更新)版本。
只有刷新页面,他们才会看到较新的版本。没有显示错误。
我使用推入生产$ ng build --prod
,然后将构建插入到 AWS Amplify 中。
当用户在浏览器中打开应用程序时,该应用程序应始终更新到最新版本。但这并没有发生。
过去几年我在 Stack Overflow 上看到过对此的讨论,例如here https://stackoverflow.com/questions/48146332/angular5-pwa-doesnt-refresh-service-workers and here https://stackoverflow.com/questions/46179907/angular-4-pwa-service-worker-doesnt-update-when-new-updates-available。但这些问题没有公认的答案,给出的建议是关于实施解决方法的。
这个问题的解决办法是什么?
就我而言,该应用程序经过多次迭代,并且提取了大量本地资源。因此,用户仍然看到一周前的版本是一个重大问题。我希望这不是预期的行为——如果是的话,这对 PWA 功能来说是一个很大的缺点。
In the 角度文档 https://angular.io/guide/service-worker-config#updatemode有一些关于“updateMode”的讨论,但在我看来,我的设置已经就位,可以正常工作,但问题仍然存在。这是我的 ngsw-config.json:
{
"$schema": "./node_modules/@angular/service-worker/config/schema.json",
"index": "/index.html",
"assetGroups": [
{
"name": "app",
"installMode": "prefetch",
"resources": {
"files": [
"/favicon.ico",
"/index.html",
"/manifest.webmanifest",
"/*.css",
"/*.js"
]
}
}, {
"name": "assets",
"installMode": "lazy",
"updateMode": "prefetch",
"resources": {
"files": [
"/assets/**",
"/*.(eot|svg|cur|jpg|png|webp|gif|otf|ttf|woff|woff2|ani)"
]
}
}
]
}