我正在构建一个 npm 包,其中包含一些从 Emscripten 模块"胶水代码"加载的 WebAssembly。
目前,WASM 是通过静态指定的 URL 从胶水代码中获取
的// emscripten glue code
import rppgLoader from './set_asm.js';
async load() {
// load webassembly code
this.instance = rppgLoader({
locateFile(path) {
return `${process.env.PUBLIC_URL}/wasm/set_asm.wasm`;
}
});
此 URL 是特定于应用程序的,因此与 npm 模块不兼容,在该模块中,所有内容都必须包含并与大多数构建系统(webpack、browserify 等(兼容。
我尝试遵循谷歌工程师@surma的要点,旨在使wasm/emscripten和webpack一起工作,但没有运气(见要点的最后评论(
我试图实现的是一个对用户透明的 npm 模块。例如:
npm install x
import { y } from "x";
应该工作。这包括wasm代码,并且与大多数捆绑器兼容。
这可能吗?如果是这样,是否有任何 npm 包的例子使其工作?
干杯!
我将WASM模块捆绑到opus-stream-decoder
NPM包中。package.json
使用main
属性来声明 WASM 入口点。另请查看显示导入它的test-*
文件,使用新的 ES 模块import
语法或旧require()