UNPKG

wat2js

Version:

Compile WebAssembly .wat files to a common js module

94 lines (65 loc) 2.22 kB
# wat2js Compile WebAssembly .wat files to a common js module ``` npm install -g wat2js ``` See https://github.com/WebAssembly/wabt for more WebAssembly goodies. Currently requires the `wat2wasm` program to be installed globally. If you don't have that already you can get that by installing the webassembly binary toolkit by using this little [helper](https://github.com/mafintosh/webassembly-binary-toolkit) ## Usage First make a basic WebAssembly .wat file ``` ;; example.wat (module ;; var result = add(a, b) (func (export "add") (param $a i32) (param $b i32) (result i32) ;; return a + b (i32.add (get_local $a) (get_local $b) ) ) ) ``` Then compile it to WebAssembly and wrap in a common js loader by doing ``` sh wat2js example.wat -o example.js ``` To run the WebAssembly simply do: ``` js var example = require('./example.js')() // load the wasm if (!example) throw new Error('WebAssembly not supported by your runtime') var result = example.exports.add(1, 2) console.log('1 + 2 = ' + result) ``` To keep recompiling the `.wat` file when it changes pass the `--watch` option as well ``` sh wat2js example.wat -o example.js --watch # recompile when example.wat changes ``` You can also pass arguments to `wat2wasm`: ``` sh wat2js example.wat -o example.js --watch -- --debug-names # add debug names section ``` ## API #### `var mod = require('./compiled-wat.js')([options])` Loads your WebAssembly module. If WebAssembly is not supported by the runtime, `null` is returned. Options include: ``` js { imports: {...} // import objected forwared to WASM, async: true // force async loading. } ``` Note that if your WASM is larger than 4kb, some browsers might force async loading. `mod` looks like this ``` js { exports: {...}, // exports WASM functions memory: Uint8Array, // exports.memory wrapped in a uint8array (if exported) buffer: Uint8Array, // the WASM module as a buffer onload: onload(cb), // function you can call to wait for async loading realloc: realloc(bytes) // reallocate the memory buffer to a new size } ``` In case of async loading `exports` and `memory` will be `null` until the module has been loaded. ## License MIT