>我创建了ngsw-config.json
>我运行ng set apps.0.serviceWorker = true命令,所以我在angular-cli.json中有“serviceWorker”:true.
>我安装了“@ angular / service-worker”:“5.2.9”
>我添加到app.module.ts:
import { ServiceWorkerModule } from '@angular/service-worker'; imports: [ ... ServiceWorkerModule.register('/ngsw-worker.js',{ enabled: environment.production }),]
我甚至试图将这段代码(我在某处找到解决方案)添加到main.ts中
platformBrowserDynamic().bootstrapModule(AppModule).then(() => { if ('serviceWorker' in navigator && environment.production) { navigator.serviceWorker.register('/ngsw-worker.js'); } }).catch(err => console.log(err));
但我得到了这个错误:
Uncaught (in promise) DOMException: Failed to register a
ServiceWorker: The script has an unsupported MIME type (‘text/html’).ERROR Error: Uncaught (in promise): SecurityError: Failed to register
a ServiceWorker: The script has an unsupported MIME type
(‘text/html’). at resolvePromise
(polyfills.3e9ea997ddae46e16c09.bundle.js:1)
在我自己的个人小应用程序中,我做了同样的工作,没有任何错误.我们遇到此错误的应用程序非常庞大.有很多第三方库.我读过它们可能有问题.
你能帮我吗?
此外,我正在检查我自己的应用程序以找到可能的差异,我没有,但我查看了devtools中的网络选项卡,我注意到应该由服务工作者缓存的文件总是被加载.请问这是正确的行为吗?
您可能正在使用HTML5 pushState style URLs,并且您有configured your web server可以返回服务器上实际不存在的任何文件或文件夹的索引页(通常为index.html).如果ngsw-worker.js实际上不存在,则Web服务器会将请求重定向到ngsw-worker.js到index.html(因此MIME类型为“text / html”).
运行时,通常会将ngsw-worker.js文件复制到dist文件夹中
ng build --prod