An open API service indexing awesome lists of open source software.

https://github.com/rainbowatcher/wasmup

wasm pack, made easy
https://github.com/rainbowatcher/wasmup

Last synced: 3 months ago
JSON representation

wasm pack, made easy

Awesome Lists containing this project

README

          

[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/rainbowatcher/wasmup/ci.yml)](https://github.com/rainbowatcher/wasmup/actions)
![GitHub License](https://img.shields.io/github/license/rainbowatcher/wasmup)
[![NPM Version](https://img.shields.io/npm/v/wasmup)](https://www.npmjs.com/package/wasmup)

# wasmup

Wasm build, made easy

> [!WARNING]
> It's in early development status, use in your own risk.

## features

- Build a set of code that can run seamlessly in Node.js, Deno, Bun, and browsers.
- No setup needed, just use directly.
- The generated package.json in pretty order.
- Add parameter validation to functions.

## Usage

Requires Node.js `>=20.19.0`.

```sh
pnpm install -D wasmup
```

```jsonc
{
// ...
"scripts": {
"build": "wasmup build --clean .",
},
}
```

### Runtime usage (Node.js / Bun / Deno / Web)

Use the same ESM API in all runtimes:

```ts
import init, { hello_world } from "your-wasm-package"

await init()
console.log(hello_world())
```

For sync initialization:

1. `initSync` is only supported in Node.js, Bun and Deno.
2. `initSync` is not supported in browsers.

For browser deployment:

1. Keep `index_bg.wasm` accessible by URL.
2. `index_bg.wasm` should be deployed next to the generated JS entry (or with an equivalent URL mapping).

### Configuration

The Wasmup configuration file may be named any of the following:

- `wasmup.config.js`
- `wasmup.config.cjs`
- `wasmup.config.mjs`
- `wasmup.config.ts`
- `wasmup.config.mts`
- `wasmup.config.cts`
- `wasmup.config.json`

It should be placed in the root directory of your project and export an configuration objects. Here’s an example:

```ts
import { defineConfig } from "wasmup"

export default defineConfig({
clean: true,
output: "packages/toml-edit-js",
scope: "rainbowatcher",
})
```

### wasm-opt options

you can pass wasm-opt params by config in Cargo.toml, details ref to this link: [cargo-toml-configuration](https://rustwasm.github.io/docs/wasm-pack/cargo-toml-configuration.html)

```toml
[package.metadata.wasm-pack.profile.release]
wasm-opt = [
# Optimize level 4
"-O4",
# Run passes to convergence, continuing while binary size decreases
"--converge",
"--strip-debug",
"--strip-dwarf",
# flattens out code, removing nesting
"--flatten",
# inline small functions
"--inlining",
# removes unreachable code
"--dead-code-elimination",
"--minify-imports-and-exports-and-modules",
# Grand Unified Flow Analysis
"--gufa",
]
```

## License

[MIT](./LICENSE) © Made by ❤️