HMR与Angular作为web worker与platform-webworker一起运行

时间:2018-06-02 16:25:35

标签: angular web-worker

我正在尝试使用platformWorkerAppDynamic等实现基于Web worker的应用程序,但我在实施HMR时遇到了一些困难。

如果我不打电话给appModule.destroy(),那么HMR实际上是“有效”的,因为如果我进行更改,它就会热更新并重新正确呈现。但是,我将剩下N个正在运行的Web工作者,其中N是热重新加载的次数。因此,如果我热重新加载三次,每次点击按钮都会动作三次。

相反,如果我使用调用appModule.destroy()的HMR的常用方法,则应用程序热重新加载,并按预期重新渲染,但任何后续UI交互(如按钮单击)都会导致{{ 1}}

例如:

ERROR TypeError: Cannot read property 'events' of null.

重新加载webworker模块的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

经过对此的大量研究后发现,问题在于Angular在platform-webworker中对网络工作者的实施;即使在销毁应用程序模块之后,仍然会连接两个关键的侦听器并监听现在被破坏的代码:PostMessageBusSink中的区域订阅和PostMessageBusSource中的事件侦听器。

我创建了一个GitHub问题,其中包含更多详细信息:

https://github.com/angular/angular/issues/24274