rolldown-plugin-wasm
v0.2.1
Published
Rolldown plugin for WASM.
Readme
rolldown-plugin-wasm
Rolldown plugin for WASM.
This project is heavily referenced from @rollup/plugin-wasm and vite-plugin-wasm.
Install
npm i rolldown-plugin-wasmUsage
// rolldown.config.ts
import { defineConfig } from 'rolldown'
import { wasm } from 'rolldown-plugin-wasm'
export default defineConfig({
plugins: [
wasm({
// ...options
}),
],
})Importing WASM Modules
import { add } from './add.wasm'
add(1, 2)Asynchronous Init
import init from './add.wasm?init'
const instance = await init(
imports, // optional
)
instance.exports.add(1, 2)Synchronous Init
import initSync from './add.wasm?init&sync'
const instance = initSync(
imports, // optional
)
instance.exports.add(1, 2)wasm-bindgen Support
Target bundler (default, recommended)
import { add } from 'some-pkg'
add(1, 2)Target web
Node.js
import { readFile } from 'node:fs/promises'
import init, { add } from 'some-pkg'
import wasmUrl from 'some-pkg/add_bg.wasm?url'
await init({
module_or_path: readFile(new URL(wasmUrl, import.meta.url)),
})
add(1, 2)Browser
import init, { add } from 'some-pkg/add.js'
import wasmUrl from 'some-pkg/add_bg.wasm?url'
await init({
module_or_path: wasmUrl,
})
add(1, 2)[!NOTE] Other targets such as
nodejsandno-modulesare not supported.
TypeScript Support
// tsconfig.json
{
"compilerOptions": {
"types": ["rolldown-plugin-wasm/types"],
},
}Options
/**
* - `"auto"` will determine the environment at runtime and invoke the correct methods accordingly
* - `"auto-inline"` always inlines the WASM and will decode it according to the environment
* - `"browser"` omits emitting code that requires node.js builtin modules
* - `"node"` omits emitting code that requires `fetch`, but requires Node.js 20.16.0 or higher
*/
export type TargetEnv = 'auto' | 'auto-inline' | 'browser' | 'node'
export interface Options {
/**
* The maximum file size for inline files. If a file exceeds this limit, it will be copied to the destination folder and loaded from a separate file at runtime.
* If `maxFileSize` is set to `0` all files will be copied.
* Files specified in `sync` to load synchronously are always inlined, regardless of size.
*
* @default 14 * 1024
*/
maxFileSize?: number
/**
* String used to rename the emitted Wasm files.
* @default '[hash][extname]'
*/
fileName?: string
/**
* A string which will be added in front of filenames when they are not inlined but are copied.
*/
publicPath?: string
/**
* Configures what code is emitted to instantiate the Wasm (both inline and separate)
*/
targetEnv?: TargetEnv
}Sponsors
License
MIT License © 2026-PRESENT Kevin Deng
MIT Copyright (c) 2022 Menci
MIT License Copyright (c) 2019 RollupJS Plugin Contributors
