我正在尝试网络 worker 在我的 Angular 8 应用程序中运行耗时的数据分析脚本,但我在捆绑 worker 时遇到了一些问题。我正在寻求帮助以找出我所缺少的东西。
我使用 Angular-CLI 8.0.2 中包含的原理图为我的项目生成了一个新的 worker:
ng g webWorker suggestions --project=my-project
这会生成一个新的 suggestions.worker.ts
和 tsconfig.worker.ts
,并更新我的 tsconfig.app.json
,angular.json
和 package.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/