angular - new Worker() 只有在传递一个字符串时才会被捆绑

标签 angular typescript angular-cli web-worker

我正在尝试网络 worker 在我的 Angular 8 应用程序中运行耗时的数据分析脚本,但我在捆绑 worker 时遇到了一些问题。我正在寻求帮助以找出我所缺少的东西。

我使用 Angular-CLI 8.0.2 中包含的原理图为我的项目生成了一个新的 worker:

ng g webWorker suggestions --project=my-project

这会生成一个新的 suggestions.worker.tstsconfig.worker.ts,并更新我的 tsconfig.app.jsonangular.jsonpackage.json。这些对我来说没问题,但如果需要,我可以提供详细信息。

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

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;
}

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

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

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

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

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

任何建议将不胜感激!

最佳答案

解决方案在这里https://github.com/angular/angular-cli/issues/14776#issuecomment-516998921 ,所以只需添加第二个参数,如下所示

new Worker("file path", { type: "module" });

关于angular - new Worker() 只有在传递一个字符串时才会被捆绑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56517198/

相关文章:

angular cli npm run test with chrome

typescript - 默认的 Angular-CLI 项目在 Safari 中失败 - 严格模式的罪魁祸首?

intellij-idea - 使用 dart 为 angular2 组件定义提供程序

CSS 不适用于行图

typescript - Typescript 用户定义类型/对象的数组作为 Lit v2 中的属性

postgresql - 从 TypeORM docker 容器连接 PostgreSQL

javascript - 找不到模块 '@angular-devkit/schematics/tasks'

inheritance - 从 Http 继承时没有 ConnectionBackend 的提供程序

Angular 业力测试 - ReferenceError : Stripe is not defined

typescript - 条件类型 返回类型 函数签名重载解析