【发布时间】:2019-12-05 21:51:46
【问题描述】:
是否可以使用@angular/service-worker 注册一个用 TypeScript 编写的 ServiceWorker?
当前在 app.module.ts 中注册服务工作者如下所示:
ServiceWorkerModule.register('ngsw-worker.js', {
enabled: environment.production
})
是否可以注册ngsw-worker.ts?
至少对于 Angular 中的网络工作者来说这是可能的:
const worker = new Worker('../my-worker.worker', {
type: 'module'
});
my-worker.worker.ts
/// <reference lib="webworker" />
import {someMethod} from './some-method';
addEventListener('message', ({ data }) => {
const response = `worker response to ${data}`;
postMessage(response);
someMethod();
});
感谢任何帮助 - 谢谢
【问题讨论】:
-
浏览器不知道 TypeScript。 TypeScript 被编译为 JavaScript,这就是浏览器下载和执行的内容:JavaScript 代码,而不是 TypeScript 代码。
-
是的,但是 Angular 在内部使用 webpack 将这些 TS 文件编译为 JS。为什么不支持服务工作者,因为他们已经支持网络工作者?
-
AFAIR,此代码用于注册 Angular 服务工作者,由 Angular 编写和提供。为什么要重写?
-
我想在 SW 和主线程上使用方法(TS 文件)。我目前的方法是将它们捆绑在一个单独的构建步骤中,并通过
importScripts('sw-bundle.js')导入它们。我的问题是是否有更好的方法来做到这一点,例如使用 Angular 编译器。它适用于网络工作者(使用上面的代码),我也希望对 SW 使用类似的东西。 -
但你是对的,看起来
ServiceWorkerContainer.register只是从 Angular 模块调用
标签: angular typescript service-worker angular-service-worker