-
Notifications
You must be signed in to change notification settings - Fork 79
Description
Describe the Bug
webpack v4 used in this template fails to parse WASM file generated by Rust 1.82+.
Steps to Reproduce
rustup default 1.82.0
npm run start
- See error:
ERROR in ./pkg/index_bg.wasm
Module parse failed: Internal failure: parseVec could not cast the value
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
Expected Behavior
Template should work without errors with latest Rust compiler.
Actual Behavior
Template doesn't work with Rust 1.82+compiler.
Additional Context
Starting from Rust 1.82.0 (released 2024-10-17) Reference types are enabled for WebAssembly target by default, see rust-lang/rust#128475. Reason for this change was just upgrade to LLVM 19, see WebAssembly/tool-conventions#233.
This broke webpack, because it uses webassemblyjs to parse WASM files and the latter didn't have Reference types support, see webpack/webpack#15566 (opened 2022-03-20, long before Rust 1.82.0 release).
webassemblyjs v1.14.1 (released 2024-11-06, 3 weeks after Rust 1.82.0 release) added working support for Reference types.
webpack v5.97.0 (released 2024-12-03, 1.5 months after Rust 1.82.0 release) finally added support for WebAssembly Reference types.
Also see related wasm-bindgen issue rustwasm/wasm-bindgen#4211 (opened 2024-10-18).
Activity
denis-sh commentedon Feb 16, 2025
Workaround
To workaround this issue (e.g. in case one has to use webpack v4) one has to change target to initial release of WebAssembly (as this version doesn't have Reference types) and force cargo to recompile Rust Standard Library.
Use these steps to do this:
.cargo/config.toml
config:rust-src
component for your architecture:To get exact name of the component one can just run
wasm-pack build
and see it in error message:npm run start
should work now.denis-sh commentedon Feb 22, 2025
Pull request #192 fixes this issue once merged.