2017-09-11 3 views
1

私はJavaScriptテストを構造化し、単純なバイナリWebAssemblyファイル、つまりwasmをローカルファイルシステムから読み込みます。ノードのようなサードパーティのツールを使用します。これまでのところ、これはノードfsオブジェクトで行うことができます。しかし私はそのような巨大なツールを読み込んで一つのファイルだけを読み込むことは望まない。 すなわちWebAssemblyを読み込む方法ネイティブツールを使用したローカルファイルシステムからのJavaScript

私はノードがなく、ブラウザなしで、JavaScriptで次のようになりますどのようにこの

var file = fs.readFileSync('myTestFile.wasm'); 
var buffer = new Uint8Array(file).buffer; 

のようなノードのコールを交換する方法を探していますか?

答えて

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の中に仕事やエンジンのシェル、および中ないブラウザ。

+0

こんにちはJSが、私はこれを正しく読んでいると私はしたくない場合は、このノードが必要ですノードi..eiを使用してください。簡単なJavaスクリプト – Tito

+0

@Tito no、node.jsを検出し、使用可能な場合にのみ使用します。さもなければ 'readbuffer'を公開しているシェルを検出し、そうでなければ' read'を使います。 –

+0

@ JFBastienは最後の手段ではありません(node.jsと 'readerbuffer()'が検出されない場合)無限に再帰的な呼び出しですか?それはバグのようです。 –

0

あなたは.wasmファイルをbase64でエンコードした場合、あなたはこのようなJavaScriptで直接それを含めることができます。

Module.wasmBinaryFile = "data:application/wasm;base64,AGFzbQEAAAAByQ/AAWACf38Bf2A..."; 
関連する問題