I ended up using @wasm-tool/wasm-pack-plugin, worker-plugin, and @craco/craco.
* wasm-pack-plugin handles most of the Rust integration, invoking `cargo` from Webpack, and spitting out a .wasm+.js bundle which src/ can `import()`.
* worker-plugin lets me write frontend code which says `new Worker('my.worker.js')`, creating a separate Webpack build target and rewriting the path appropriately.
* craco provides a means to modify `create-react-app`'s Webpack configuration without ejecting. I had to prevent file-loader from serving .wasm files, add WasmPackPlugin and WorkerPlugin to Webpack's plugin list, and disable ModuleScopePlugin to allow importing wasm-pack-plugin's output from outside ./src.
This is all less mature and more brittle than I would prefer, but it absolutely works. I'm excited for this space to improve.
Making really tiny WebAssembly graphics demos (http://cliffle.com/blog/bare-metal-wasm/)
If you're minimizing binary sizes, the biggest thing to avoid is `std::fmt`. This requires a little planning but is still quite achievable. #[no_std] crates are always safe to pick, and most of the popular std-dependent crates can be used too though you might need to toggle some features off.
I know there are many others, but I had fun doing this one.
I have yet to use ‘parcel’, though, as I haven’t really hit a problem that it would solve for me.
I've personally spent the most time with Yew: https://yew.rs/docs/
Seed appears to be popular: https://seed-rs.org/
And Moxie looks really interesting, is in active development: https://docs.rs/moxie/0.2.3/moxie/
This is a community source: https://www.arewewebyet.org/topics/webassembly/