首页 > 解决方案 > 将 emscripten webassembly 线程 (C++) 与 webpack (create-react-app) 一起使用

问题描述

我有一个 emscripten/webassembly 包装的 C++ 类,它在内部启动和使用 pthread。在其独立开发沙箱中的 Chrome 上的 javascript 中使用时,它通常可以正常工作。但是,我不能真正让它与 create-react-app 和 webpack 一起工作(即我使用 react-app-rewired 来配置 webpack)。

问题似乎来自线程化 emscripten 构建创建的 javascript 和 wasm 文件的复杂性,以及这些脚本由于 webpack 生成的文件重命名而造成的混乱。为多线程 emscipten 构建生成的文件是:

MyModule.js
MyModule.wasm
MyModule.worker.js

我可以(我认为)通过使用'方法让它在只有一个MyModule.js和一个MyModule.wasm文件的非线程模式下工作。但是,由于文件在 WebWorker 中自行启动的新文件的引入,系统变得非常混乱。当然,该文件还需要找到并访问,这也会丢失(即由于 webpack 重命名而无法找到正确的文件名)。ModulelocateFileMyModule.worker.jsMyModule.jsMyModule.worker.jsMyModule.wasm

无论如何,我已经花了几个小时在网上搜索任何像这样的成功用例,并尝试了可能的事情,包括手动编辑MyModule.jsMyModule.worker.js文件,但到目前为止没有任何运气。

有没有人成功地尝试过这样的事情,或者任何其他关于让多线程 emscripten/wasm 构建与 webpack(或 create-react-app)正常运行的建议?任何建议将不胜感激。

注意:这个问题不是关于在 web-worker 线程中运行 emscripten/webassembly 模块(尽管最后我将在 web-worker 中运行所有这些)。它特别是关于多线程 emscripten 构建(即带有 pthreads 的 C++)启动和使用 webpack 正确运行。

标签: multithreadingwebpackcreate-react-appwebassemblyemscripten

解决方案


在 Module 的 locateFile 中,您应该返回 MyModule.wasm 和 MyModule.worker.js 的正确路径。此外,在 Module 的 mainScriptUrlOrBlob 中,您应该为 MyModule.js 分配路径。mainScriptUrlOrBlob 在 worker 中用于加载 wasm。


推荐阅读