Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/ianjsikes/rust-wasm-loader

Webpack loader for Rust
https://github.com/ianjsikes/rust-wasm-loader

javascript rust wasm webassembly webpack

Last synced: about 1 month ago
JSON representation

Webpack loader for Rust

Awesome Lists containing this project

README

        

# Rust WebAssembly loader

[![npm](https://img.shields.io/npm/v/rust-wasm-loader.svg)](https://www.npmjs.com/package/rust-wasm-loader)

## Usage

This is a simple Webpack loader that shells out to cargo to build a Rust project targeting WebAssembly. See [this post](https://www.hellorust.com/setup/wasm-target/) for
more details on using Rust to target the web.

To use it, first install the package:

```bash
$ npm install rust-wasm-loader
```

Configure the loader in your Webpack config:

```js
module.exports = {
// ...
module: {
rules: [
{
test: /\.rs$/,
use: {
loader: 'rust-wasm-loader',
options: {
// Path to your 'build' or 'dist' directory relative to project root
path: 'build/',
}
}
},
// ...
]
}
}
```

Note: if you are using `file-loader`, make sure to add `.wasm` to the test field, otherwise the module will not be copied! (e.g. `test: /\.(wasm|jpg|jpeg|png|gif|svg|eot|ttf|woff|woff2)$/i,`).

Make sure you have the `cargo`, `rustc`, and (optionally) `emsdk` binaries somewhere in your `PATH`. `stdweb` and other Rust libraries require a nightly build, which can be installed from https://rustup.rs/ .

Require and initialize the wasm module:

```js
const wasm = require('./lib.rs')
wasm.then(module => {
// Use your module here
console.log(module.doub(21))
})
```

or with async/await:

```js
async function loadwasm() {
const lib = await require('./lib.rs');
// Use your module here
console.log(lib.doub(21));
}
loadwasm();
```

### Configuration

The following options can be added to the Webpack loader query:

| Name | Description | Required | Default |
| ---- | ----------- | -------- | ------- |
| `release` | Whether or not to pass the `--release` flag to cargo | false | false |
| `path` | Path to your webpack output folder relative to project root | true | '' |
| `target` | Allows one to specify `wasm32-unknown-emscripten` as build target | false | 'wasm32-unknown-unknown' |

### Example

Check out the [example](example) directory for a simple Hello World example.

This project is based off of [rust-emscripten-loader](https://github.com/mrdziuban/rust-emscripten-loader)
by [mrdziuban](https://github.com/mrdziuban).