15 unstable releases (5 breaking)
0.6.0 | Aug 30, 2020 |
---|---|
0.5.0 | Feb 7, 2020 |
0.4.5 | Nov 19, 2019 |
0.3.3 | Nov 7, 2019 |
0.1.2 | Oct 30, 2019 |
#788 in WebAssembly
30 downloads per month
485KB
1K
SLoC
Tool to create and package WASM WASI-based browser service workers
This tool provides JavaScript glue for browser service workers built with wasi-worker library.
Installation
Note: wasi-worker-cli 0.5+ requires rustc 1.41+ as it bases on wasi-snapshot-preview1 now
cargo install wasi-worker-cli
Usage
% wasiworker help
wasi-worker-cli 0.2.0
Install JavaScript glue code and WASI toolset for WASI worker to function.
USAGE:
wasiworker <SUBCOMMAND>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
SUBCOMMANDS:
deploy Executes `cargo build --bin worker` and deploys with glue code under ./dist
help Prints this message or the help of the given subcommand(s)
install Install static files and worker.rs template in current crate
- Install wasiworker template considering current directory is a crate root
wasiworker install
It will create bin/worker.rs
and place relevant target and dependencies in current Cargo.toml
. Will panic if Cargo.toml was not found.
- Build and deploy
worker
under ./dist with all depencies
wasiworker deploy
It will run cargo build --release --target wasm32-wasi --bin worker
, copy resulting worker.wasm under ./dist and copy JavaScript glue code under ./dist/worker.js. It will also add wasm_transformer to be able to run in browser.
Note: currently it uses wasm-gc tool to significantly cut resulting wasm file size.
- Look at converting to
cargo wasi
subcommand
Building/hacking
Code structure:
- src/main.rs - is the CLI, when compiled it's embedding dist glue code into resulting binary
- js/* is the source of JavaScript package, which is using rollup and typescript to build distribution files
- js/dist/* is the latest glue code distributable built with production settings
Install the cli package from the crate manually
cargo install --path . --force
It will also embed whaever version of JS glue was placed under the ./dist subfolder.
Build JS glue for development
cd js
npm install
npm run build:dev
Build JS glue for distribution
cd js
npm install
npm run build
Attributions
JavaScript glue code is built on top of following great packages. Thanks https://wasmer.io/ for their great work on making WASI easy to use.
TODO
- CLI
- JavaScript glue package
- Embed JavaScript dist into package
- Documentation
- Cargo build script to pack and install release or debug version, including building js dependencies
- Add wasm-gc to optimize resulting wasm size
- CLI install
- CLI install allows to customize worker name
- CLI deploy release only
- CLI deploy can compile for debug
Dependencies
~6MB
~107K SLoC