可以通过在Angular项目中添加以下代码来解决此问题:
import { environment } from './../environments/environment';
// ...
@NgModule({
imports: [
BrowserModule,
// ...
ServiceWorkerModule.register('ngsw-worker.js', {
enabled: environment.production,
// 设置publicUrl为本地地址
// 注意:URL必须以斜杠结尾, 否则Service Worker将无法工作
publicUrl: environment.production ? '/my-project/' : '/',
// 如果使用https, 设置https为true
// 注意:这将确保Service Worker通过HTTPS服务器提供文件
// 如果您的服务器已经提供了HTTPS, 请将此选项设置为false
// 否则, 您需要一个自签名的SSL证书
// 例如, 通过"npm run cert"命令在本地生成一个新的证书
// 并将路径设置为证书和密钥
// eg: sslCert, './ssl/cert.pem'
https: environment.production,
})
],
// ...
})
export class AppModule {}
在上述代码中,我们在ServiceWorkerModule注册方法中传递了三个参数:
ngsw-worker.js
- Service Worker文件的路径enabled
- 表示是否开启Service Worker, 如果是生产环境则开启,否则不开启publicUrl
- 表示文件的公共URL,这里我们需要设置为本地地址https
- 表示是否使用https协议来访问文件,这里我们需要设置为true才能保证Service Worker通过HTTPS服务器提供文件。如果您的服务器已经提供了HTTPS, 请将此选项设置为false。
请注意:如果在本地测试期间使用了自签名的SSL证书,请将路径设置为证书和密钥。