代码之家  ›  专栏  ›  技术社区  ›  joshcomley

HMR与Angular running作为web worker与平台webworker

  •  0
  • joshcomley  · 技术社区  · 6 年前

    我正在尝试使用 platformWorkerAppDynamic

    如果我不打电话 appModule.destroy()

    相反,如果我使用通常的方法来调用HMR 应用模块.销毁() 然后,应用程序热重新加载,并按预期重新呈现,但任何后续的UI交互(如单击按钮)都会导致 ERROR TypeError: Cannot read property 'events' of null.

    例如:

    import '@angular/common';
    import '@angular/core';
    import { platformWorkerAppDynamic } from '@angular/platform-webworker-dynamic';
    import { AppModule } from '../app/app.module';
    import '../polyfills.ts';
    
    if (module.hot) {
        module.hot.accept();
        module.hot.dispose(data => {
            modulePromise.then(appModule => {
                appModule.destroy();
            });
        });
    }
    
    const modulePromise = platformWorkerAppDynamic().bootstrapModule(AppModule);
    

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   joshcomley    6 年前

    在对此进行了大量研究后,发现问题出在Angular的webworker实现中 platform-webworker ;即使在销毁了应用程序模块之后,仍有两个密钥侦听器仍然连接在一起,并监听现在已销毁的代码:中的区域订阅 PostMessageBusSink 以及事件听众 PostMessageBusSource

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