Я ищу способ структурирования моего теста JavaScript и чтения простого двоичного файла WebAssembly, т.е. Wasm из локальной файловой системы, то есть не в приложении браузера, без использования сторонних инструментов, таких как узел. До сих пор я обнаружил, что это можно сделать с помощью узла fs object. но я не хочу загружать такой огромный инструмент только для чтения одного файла. т.е.
Я ищу способ заменить вызов узла следующим образом
var file = fs.readFileSync('myTestFile.wasm');
var buffer = new Uint8Array(file).buffer;
как это будет выглядеть в JavaScript без узла и без браузера?
Все движки JavaScript имеют не-браузерную сборку исходного кода, который выполняется в командной строке. АО имеет 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 или оболочке ядра, а не в браузере.
Если вы base64-кодируете файл.wasm, вы можете включить его непосредственно в JavaScript следующим образом:
Module.wasmBinaryFile = "data:application/wasm;base64,AGFzbQEAAAAByQ/AAWACf38Bf2A...";
readbuffer
, и если это не так, он используетread
.