Fork of webassembly-loader with the following changes:
- Remove 4000 limit for inline wasm. There's no such limitation in service worker environment.
- Update
new WebAssembly.Instance
by providing importObject arg. Add extra options to customize it.
this loader can also be used as a library ↙ see who use this?
tl;dr -- see examples
- Node v8
- Webpack v4
npm install webassembly-loader --save-dev
or
yarn add webassembly-loader --dev
How wasm code would be exported. (see examples)
- Type:
string
- Default:
async
- Expected value:
-
buffer
will export wasm code as Buffer -
module
will export wasm code as WebAssembly.Module -
instance
will export wasm code as WebAssembly.Instance -
async
will instantiate wasm code asynchronously, return promise of both WebAssembly.Module and WebAssembly.Instance -
async-module
will compile wasm code asynchronously, return promise of WebAssembly.Module -
async-instance
will instantiate wasm code asynchronously, return promise of WebAssembly.Instance
-
webpack.config.js
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
See the test cases and example projects in *.test.ts and examples for more insight.
import wasmCode from "./lib.wasm";
WebAssembly.compile(wasmCode).then(module => {
const instance = new WebAssembly.Instance(module);
console(instance.exports.add(1, 2)); // 3
});
import wasmModule from "./lib.wasm";
const instance = new WebAssembly.Instance(wasmModule);
console(instance.exports.add(1, 2)); // 3
import wasm from "./lib.wasm";
console(wasm.exports.add(1, 2)); // 3
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
});
import wasmInstantiate from "./lib.wasm";
wasmInstantiate(importObject | undefined).then(instance => {
console(instance.exports.add(1, 2)); // 3
});
import wasmInstantiate from "./lib.wasm";
wasmCompile(importObject | undefined).then(module => {
const differentInstance = new WebAssembly.Instance(module);
console(differentInstance.exports.add(1, 2)); // 3
});
- rs-jest
- rollup-plugin-rust
- [add yours 😉]
- CONTRIBUTING.md for how you can make contribution
- HACKING.md for technical details