forked from Rust-related/RustPython
68 lines
1.9 KiB
Markdown
68 lines
1.9 KiB
Markdown
# Compiling to webassembly
|
|
|
|
At this stage RustPython only has preliminary support for web assembly. The
|
|
instructions here are intended for developers or those wishing to run a toy
|
|
example.
|
|
|
|
## Setup
|
|
|
|
To get started, install
|
|
[wasm-pack](https://rustwasm.github.io/wasm-pack/installer/) and `npm`.
|
|
([wasm-bindgen](https://rustwasm.github.io/wasm-bindgen/whirlwind-tour/basic-usage.html)
|
|
should be installed by `wasm-pack`. if not, install it yourself)
|
|
|
|
## Build
|
|
|
|
Move into the `wasm` directory. This directory contains a library crate for
|
|
interop with python to rust to js and back in `wasm/lib`, the demo website found
|
|
at https://rustpython.github.io/demo in `wasm/demo`, and an example of how to
|
|
use the crate as a library in one's own JS app in `wasm/example`.
|
|
|
|
```sh
|
|
cd wasm
|
|
```
|
|
|
|
Go to the demo directory. This is the best way of seeing the changes made to
|
|
either the library or the JS demo, as the `rustpython_wasm` module is set to the
|
|
global JS variable `rp` on the website.
|
|
|
|
```sh
|
|
cd demo
|
|
```
|
|
|
|
Now, start the webpack development server. It'll compile the crate and then the
|
|
demo app. This will likely take a long time, both the wasm-pack portion and the
|
|
webpack portion (from after it says "Your crate has been correctly compiled"),
|
|
so be patient.
|
|
|
|
```sh
|
|
npm run dev
|
|
```
|
|
|
|
You can now open the webpage on https://localhost:8080 and Python code in either
|
|
the text box or browser devtools with:
|
|
|
|
```js
|
|
rp.pyEval(
|
|
`
|
|
print(js_vars['a'] * 9)
|
|
`,
|
|
{
|
|
vars: {
|
|
a: 9,
|
|
},
|
|
},
|
|
);
|
|
```
|
|
|
|
Alternatively, you can run `npm run build` to build the app once, without
|
|
watching for changes, or `npm run dist` to build the app in release mode, both
|
|
for the crate and webpack.
|
|
|
|
## Updating the demo
|
|
|
|
If you wish to update the WebAssembly demo,
|
|
[open a pull request](https://github.com/RustPython/RustPython/compare/release...main)
|
|
to merge `main` into the `release` branch. This will trigger a Travis build
|
|
that updates the demo page.
|