我正在开发一个 Angular 10 应用程序。
它使用 Angular 的“服务工作者”来创建 PWA。
编译后的应用程序位于“c:\-website-folder-\ng-app\dist”中。然后用户可以使用如下 URL 访问 App:“https://website.com/ng-app/dist”。
ServiceWorker的配置
Angular ServiceWorker 在“app.module”中配置:
@NgModule({
imports: [
CommonModule,
BrowserModule,
ServiceWorkerModule.register(
`/ng-app/dist/ngsw-worker.js`,
{
enabled: true,
scope: "/ng-app/"
}
),
...
]
})
export class AppModule {}
注册询问ServiceWorker的路径。
项目编译
Angular 项目是使用ng build
命令编译的。
它创建并填充“dist”文件夹。它包含“ng-app.webmanifest”和“ngsw.json”。
“ngsw.json”文件
“ngsw.json”文件包含所有已编译的 JS 和资产的列表,例如 GIF、CSS。Angular ServiceWorker 使用这个文件来缓存资源。
{
"configVersion": 1,
"timestamp": 1613033261333,
"index": "/index.html",
"assetGroups": [
{
"name": "app",
"installMode": "prefetch",
"updateMode": "prefetch",
"cacheQueryOptions": {
"ignoreVary": true
},
"urls": [
"/address-book-editor-address-book-editor-module-es2015.51b00058cbaa9682510e.js",
"/address-book-editor-address-book-editor-module-es5.51b00058cbaa9682510e.js",
"/article-editor-article-editor-module-es2015.e4540348b2495fd50875.js",
"/article-editor-article-editor-module-es5.e4540348b2495fd50875.js",
"/berry-editor-berry-editor-module-es2015.8cc1850fb1455965c490.js",
"/berry-editor-berry-editor-module-es5.8cc1850fb1455965c490.js",
...
],
"patterns": []
},
{
"name": "assets",
"installMode": "lazy",
"updateMode": "prefetch",
"cacheQueryOptions": {
"ignoreVary": true
},
"urls": [
"/assets/components/fontawesome/fonts/fontawesome-webfont.eot",
"/assets/components/fontawesome/fonts/fontawesome-webfont.svg",
"/assets/components/fontawesome/fonts/fontawesome-webfont.ttf",
...
],
"patterns": []
}
],
"dataGroups": [],
"hashTable": {
"/address-book-editor-address-book-editor-module-es2015.51b00058cbaa9682510e.js": "4e6b67457c4b7549f331e6c2cbe3334d13129386",
"/address-book-editor-address-book-editor-module-es5.51b00058cbaa9682510e.js": "886188af27941dad766bcdcb3e2880b790cf32de",
"/article-editor-article-editor-module-es2015.e4540348b2495fd50875.js": "985558c2949d9b34d3cdc9e0b7d556d54508b208",
...
},
"navigationUrls": [
{
"positive": true,
"regex": "^\\/.*$"
},
{
"positive": false,
"regex": "^\\/(?:.+\\/)?[^/]*\\.[^/]*$"
},
{
"positive": false,
"regex": "^\\/(?:.+\\/)?[^/]*__[^/]*$"
},
{
"positive": false,
"regex": "^\\/(?:.+\\/)?[^/]*__[^/]*\\/.*$"
}
]
}
问题
如您所见,资源引用到 ROOT,Angular ServiceWorker 将尝试使用这样的 URL 下载这些资源
代替
帮助
有一个解决方案可以让 Angular Builder 指定正确的 URL 路径吗?
我正在尝试用正确的路径更改“ngsw.json”文件,现在它可以工作了。但这是一个技巧......
非常感谢