angular - 如何在 Angular 中使用 SharedWorker?
问题描述
我的 Angular 应用程序中已经有了 Workers。但我正在尝试创建一个共享工作者,但它失败了,说“无法获取工作者脚本”。在控制台中。
const worker = new SharedWorker('../../../workers/my.shared.worker', { name: 'mySharedWorker', type: 'module' });
如果我用 Worker 替换 SharedWorker - 它可以完美运行。
当然,我根据需要制作了一切。创建了一个附加.tsconfig
文件:
/// tsconfig.worker.json
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/worker",
"lib": [
"es2018",
"webworker"
]
},
"include": [
"src/workers/*.worker.ts"
]
}
并添加webWorkerTsConfig
到angular.json
配置中:
projects.myProject.architect.build.options.webWorkerTsConfig: "tsconfig.worker.json"
我发现了 Nikita Barsukov 的这篇文章,但它仅在您的 Worker 以单个文件存储在assets
文件夹中时才有效。但是我的 SharedWorker 包含十几个 .ts 文件,应该像普通 Worker 一样打包。
解决方案
似乎 Angular-CLI 现在(对于 v10.0.7)仅支持工人。但不是 SharedWorkers。
Angular-CLI 在后台使用worker-plugin。实际上,它可以加载 SharedWorkers,但它应该在 WebpackConfig 中启用。
所以有两种选择。
在自定义 webpack 配置中使用
@angular-builders/custom-webpack
和添加sharedWorker
参数。WorkerPlugin
但我无法让它工作。使用custom-webpack 加载器(这个选项对我有用):
import workerUrl from 'worker-plugin/loader?name=mySharedWorker!../../../workers/my.shared.worker.ts';
// ....
const worker = new SharedWorker(workerUrl, { name: 'mySharedWorker', type: 'module' });
name=mySharedWorker
未来捆绑文件的名称在哪里。如果你省略它,它将使用类似的东西0.worker.js
,但它可能会与普通的 Worker 捆绑发生冲突,因为它会使用相同的名称。所以总是在加载器参数中指定你的包的名称。
推荐阅读
- sum - prometheus sum after rate 功能背后的逻辑是什么?
- apache-kafka - Kafka Stream 只消费 N 条消息
- javascript - 使用 JS 使用正则表达式创建数字仍然创建重复数字
- r - 如何读取文件夹中的 .xlsm 文件,该文件夹使用 R 存在于不同文件夹中
- linux - Modbus RTU 到 Raspberry Pi/Linux 到 Modbus TCP
- javascript - 如何在 ReactJS 中定位 DOM 元素?
- python - 使用 Pandas 与 CSV 读取器/写入器处理和保存大型 CSV 文件
- excel - 在 Microsoft Excel 中单击按钮时如何在单元格中播放音频文件 (.Mp3)
- javascript - 在 jQuery 中切换 HTML 按钮时,时间戳不会随活动日期时间更新?
- java - 从 America/New_York 到 UTC 的时区转换错误