1.1.0 ⢠Published 7 years ago
webassembly-loader v1.1.0
webassembly-loader
this loader can also be used as a library ā see who use this?
tl;dr -- see examples
Motivation

Minimum Requirements
- Node v8
- Webpack v4
Installation
npm install webassembly-loader --save-devor
yarn add webassembly-loader --devOptions
export
How wasm code would be exported. (see examples)
- Type:
string - Default:
async - Expected value:
bufferwill export wasm code as Buffermodulewill export wasm code as WebAssembly.Moduleinstancewill export wasm code as WebAssembly.Instanceasyncwill instantiate wasm code asynchronously, return promise of both WebAssembly.Module and WebAssembly.Instanceasync-modulewill compile wasm code asynchronously, return promise of WebAssembly.Moduleasync-instancewill instantiate wasm code asynchronously, return promise of WebAssembly.Instance
module.exports = {
rules: [{
test: /\.wasm$/,
type: "javascript/auto",
use: [{
loader: "webassembly-loader",
options: {
export: "async"
}
}]
}]
}tips: you can use query parameter to change export mode on demand
Examples
See the test cases and example projects in *.test.ts and examples for more insight.
{export: 'buffer'}
import wasmCode from "./lib.wasm";
WebAssembly.compile(wasmCode).then(module => {
const instance = new WebAssembly.Instance(module);
console(instance.exports.add(1, 2)); // 3
});{export: 'module'}
import wasmModule from "./lib.wasm";
const instance = new WebAssembly.Instance(wasmModule);
console(instance.exports.add(1, 2)); // 3{export: 'instance'}
import wasm from "./lib.wasm";
console(wasm.exports.add(1, 2)); // 3{export: 'async'}
import wasmInstantiate from "./lib.wasm";
wasmInstantiate(importObject | undefined).then(({ instance, module }) => {
console(instance.exports.add(1, 2)); // 3
// create different instance, extra will be called in different environment
const differentInstance = new WebAssembly.Instance(module);
console(differentInstance.exports.add(1, 2)); // 6
});{export: 'async-instance'}
import wasmInstantiate from "./lib.wasm";
wasmInstantiate(importObject | undefined).then(instance => {
console(instance.exports.add(1, 2)); // 3
});{export: 'async-module'}
import wasmInstantiate from "./lib.wasm";
wasmCompile(importObject | undefined).then(module => {
const differentInstance = new WebAssembly.Instance(module);
console(differentInstance.exports.add(1, 2)); // 3
});Who use this?
Contributing
- CONTRIBUTING.md for how you can make contribution
- HACKING.md for technical details