javascript - 如何让非 Angular Service Worker 在 Angular 中运行

标签 javascript angular service-worker

我一直在尝试将 Service Worker 实现到全新的 Angular 应用程序中。它不是 Angular 的软件,它只是开箱即用的 API。我想有目的地使用这个而不是 Angular 的(以防万一)。阅读后,我遇到的问题似乎与路径问题有关,但我相信我的路径是正确的。我看到的另一个问题是我们无法使用 ng serve 并成功注册 SW,所以我开始执行 ng build --prod 然后使用 http-server 部署它,但我仍然收到以下错误:

Service worker registration failed: TypeError: Failed to register a ServiceWorker: A bad HTTP response code (404) was received when fetching the script.

我需要哪些步骤才能成功注册此软件?

此外,我的文件结构是:

- main.ts
- index.html
- service-worker.js

service-worker.js 文件是空的,我的 main.ts 文件是包含注册的地方:

import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
import { environment } from './environments/environment';

if (environment.production) {
  enableProdMode();
}

if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('./service-worker.js')
  .then(registration => console.log('Service worker registration succeeded:', registration)
  , error => console.log('Service worker registration failed:', error));
} else {
  console.log('Service workers are not supported.');
}
platformBrowserDynamic().bootstrapModule(AppModule)
  .catch(err => console.error(err));```

最佳答案

所以我最终想出了一个解决方案,由于我缺乏理解,我很乐意得到反馈。

由于我正在运行 angular 构建命令,所以我查看了 angular.json 文件并检查了构建命令。我已将 service-worker.js 添加到 assets 数组(以 src/service-worker.js 的形式),并且我的 manifest.json 文件也添加到数组中,因为我遇到了与上述问题类似的问题,这解决了所有问题。

以上操作后SW注册成功。我猜是因为 Angular 编译器将所有内容编译到一个输出文件中,因为它与 index.html 具有相同的结构,并且将它们指定为 Assets 将使其不包含在“捆绑”中“?

注意 执行此解决方案还允许我使用 ng-serve(因此无需构建和使用 http-server)

关于javascript - 如何让非 Angular Service Worker 在 Angular 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56133744/

相关文章:

c# - 在网络浏览器中查看 pptx 文件

web - 注册 ServiceWorker 失败(Flutter)

javascript - 从 GAS 发送 GCM 请求时为 "JSON_PARSING_ERROR: Unexpected character (d) at position 0."

php - Facebook登录阻止了一个框架问题

javascript - 单击图像到 div 时如何显示文本

Angular 2组件输入没有值(value)

javascript - Angular 是平台还是框架?

angular - 无法将新方法添加到 Angular TypeScript 类 (FormGroup)

javascript - ServiceWorkerContainer.ready 特定的 scriptURL?

javascript - 服务 worker 中的缓存未定义