如果传递了字符串,则新的Worker()将仅捆绑在一起

thi*_*nck 5 web-worker typescript angular-cli angular

我正在尝试使用Web Worker在Angular 8应用程序中运行耗时的数据分析脚本,但是在捆绑该Worker时遇到了一些麻烦。我正在寻找帮助以找出我所缺少的东西。

我已使用Angular-CLI 8.0.2随附的示意图为我的项目生成了一个新工作线程:

ng g webWorker suggestions --project=my-project
Run Code Online (Sandbox Code Playgroud)

这会产生一个新的suggestions.worker.tstsconfig.worker.ts,并更新我的tsconfig.app.jsonangular.jsonpackage.json。这些对我来说看起来不错,但是如果需要,我可以提供详细信息。

我已将我移动suggestions.worker.ts到与实例化工作程序的服务相同的文件夹中。实例化工作程序的函数如下所示:

async calculateSuggestions<T>(
    data: T[]
): Promise<Suggestions<T>> {
    const worker = new Worker('./suggestions.worker', {
      type: 'module',
    });

    const result = new Promise((resolve, reject) => {
      worker.onmessage = ({ data }) => {
        resolve(data);
      };

      worker.onerror = ({ error }) => {
        reject(error);
      };
    }) as Promise<Suggestions<T>>;

    worker.postMessage({
      data: data
    });

    return result;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我构建项目时,出现以下警告和错误:

WARNING in new Worker() will only be bundled if passed a String.

ERROR in chunk suggestions-suggestions-module
suggestions-suggestions-module.js
{..} \node_modules\@ngtools\webpack\src\index.js! {..} \src\app\extractor\
No template for dependency: ConstDependency
Run Code Online (Sandbox Code Playgroud)

我的猜测是我没有Worker正确实例化,导致绑定过程失败。

该警告似乎表明我应该将a传递StringWorker构造函数,但是我已经这样做了。

此外,错误第3行上的感叹号后面的路径实际上是我在其中存储服务和工作文件的两个文件夹。也许这是一个提示?

任何建议将不胜感激!

thi*_*nck 0

我通过降级到 angular-cli@8.0.1 解决了这个问题。仍然不确定问题的根本原因。

  • 这不是解决方案,而是临时解决方案。8.1.3中问题依然存在 (3认同)