我正在寻找一种方法来构建我的JavaScript测试并读取一个简单的二进制WebAssembly文件,即来自本地文件系统的ism,即不在浏览器应用程序中,而不使用像节点这样的第三方工具。到目前为止,我发现这可以通过节点fs对象完成。但我不想加载这么大的工具只读一个文件。 即
我正在寻找替换这样的节点调用的方法
var file = fs.readFileSync('myTestFile.wasm');
var buffer = new Uint8Array(file).buffer;
在没有节点且没有浏览器的JavaScript中,它会如何?
答案 0 :(得分:1)
所有JavaScript引擎都有一个非浏览器构建的源代码,它们在命令行上运行。 JSC有jsc
,V8有d8
,SpiderMonkey js
和ChakraCore ch
。
每个浏览器供应商都会使用它们进行测试,我们有时不可避免地需要读取ASCII或二进制文件。遗憾的是,这种功能并不是真正的标准,但我发现这适用于我的目的:
const readAsBinary = filename => {
if (typeof process === 'object' && typeof require === 'function') {
const binary = require('fs').readFileSync(file);
return !binary.buffer ? new Uint8Array(binary) : binary;
} else
return typeof readbuffer === 'function'
? new Uint8Array(readbuffer(file))
: read(file, 'binary');
};
const instance = new WebAssembly.Instance(new WebAssembly.Module(readAsBinary(filename)), {});
这将仅在node.js或引擎的shell中工作,而不在浏览器中。
答案 1 :(得分:0)
如果您对.wasm文件进行base64编码,那么您可以直接将其包含在JavaScript中,如下所示:
Module.wasmBinaryFile = "data:application/wasm;base64,AGFzbQEAAAAByQ/AAWACf38Bf2A...";