Tauri v2集成photon_rs时wasm-bindgen依赖冲突求助
Tauri v2 集成 photon_rs 时的 wasm-bindgen 版本冲突问题
我正在使用 Tauri v2 开发应用,尝试集成图像处理库 photon_rs。运行 cargo run 时触发 wasm-bindgen 版本冲突错误:
Updating crates.io index error: failed to select a version for `wasm-bindgen`. ... required by package `wasm-streams v0.4.1` ... which satisfies dependency `wasm-streams = "^0.4"` of package `reqwest v0.12.0` ... which satisfies dependency `reqwest = "^0.12"` of package `tauri v2.0.0` ... which satisfies dependency `tauri = "^2"` of package `blurryface v0.0.0 (/Users/jacharles/dev_freelance/tauri-apps/blurryface/src-tauri)` versions that meet the requirements `^0.2.87` are: 0.2.92, 0.2.95, 0.2.93, 0.2.91, 0.2.90, 0.2.89, 0.2.87 all possible versions conflict with previously selected packages. previously selected package `wasm-bindgen v0.2.78` ... which satisfies dependency `wasm-bindgen = "=0.2.78"` of package `photon-rs v0.3.2` ... which satisfies dependency `photon-rs = "^0.3.2"` of package `blurryface v0.0.0 (/Users/jacharles/dev_freelance/tauri-apps/blurryface/src-tauri)` failed to select a version for `wasm-bindgen` which could resolve this conflict
我并未计划在 Tauri 或 photon_rs 中使用 WASM。已知 photon_rs 支持通过特性标志排除 WASM 依赖,但在 Cargo.toml 中配置 photon-rs = { version = "0.3.2", default-features = false } 后无效果。推测是 Tauri 间接引入的 wasm-bindgen 导致依赖树中版本冲突。运行 cargo update --package wasm-bindgen 仍报错:
Updating crates.io index error: failed to select a version for `wasm-bindgen`. ... required by package `softbuffer v0.4.0` ... which satisfies dependency `softbuffer = "^0.4"` of package `tauri-runtime-wry v2.1.2` ... which satisfies dependency `tauri-runtime-wry = "^2.1.2"` of package `tauri v2.0.6` ... which satisfies dependency `tauri = "^2.0.0"` of package `tauri-plugin-shell v2.0.0` ... which satisfies dependency `tauri-plugin-shell = "^2"` of package `blurryface v0.0.0 (/Users/jacharles/dev_freelance/tauri-apps/blurryface/src-tauri)` versions that meet the requirements `^0.2.86` are: 0.2.95, 0.2.93, 0.2.92, 0.2.91, 0.2.90, 0.2.89, 0.2.87, 0.2.86 all possible versions conflict with previously selected packages. previously selected package `wasm-bindgen v0.2.78` ... which satisfies dependency `wasm-bindgen = "=0.2.78"` of package `photon-rs v0.3.2` ... which satisfies dependency `photon-rs = "^0.3.2"` of package `blurryface v0.0.0 (/Users/jacharles/dev_freelance/tauri-apps/blurryface/src-tauri)` failed to select a version for `wasm-bindgen` which could resolve this conflict
我的 Cargo.toml 配置如下:
[package] name = "blurryface" version = "0.0.0" description = "A Tauri App" authors = ["you"] edition = "2021" [build-dependencies] tauri-build = { version = "2", features = [] } # [patch.crates-io] # wasm-bind = { git = 'https://github.com/serde-rs/serde.git' } [dependencies] tauri = { version = "2", features = [], default-features = false } serde = { version = "1", features = ["derive"] } serde_json = "1" grep = "0.3.1" walkdir = "2.5.0" termcolor = "1.4.1" ignore = "0.4.22" tauri-plugin-dialog = "2" tauri-plugin-shell = "2" photon-rs = { version = "0.3.2", default-features = false } # disables wasm # enable_wasm
问题
- 能否从 Tauri 侧禁用 WASM 依赖?
- 还有哪些强制指定版本的方法?
- 是否应该 fork photon_rs 手动移除不需要的依赖?
- 还有其他可行的解决方案吗?
解答
1. 从 Tauri 侧禁用 WASM 依赖
可以通过精简特性集来减少 WASM 相关依赖的引入:
- 对
tauri-plugin-shell也设置default-features = false,仅启用你实际需要的特性,避免它间接引入softbuffer带来的wasm-bindgen; - 强制指定
softbuffer的特性,关闭其 WASM 支持:[dependencies] softbuffer = { version = "0.4.0", default-features = false, features = ["x11"] } # 或根据系统选"wayland" - 检查 Tauri 的特性列表,确认是否有额外的网络或 runtime 特性默认启用了
reqwest,进一步调整tauri的特性参数。
2. 强制指定版本的方法
- 使用
[patch.crates-io]:强制将wasm-bindgen升级到兼容版本,注意需验证photon-rs v0.3.2是否能适配该版本:[patch.crates-io] wasm-bindgen = { version = "0.2.95" } - 使用
cargo override:在本地项目中强制锁定版本,执行命令:
若cargo override set wasm-bindgen@0.2.95photon-rs出现编译错误,说明版本不兼容,此方法无效。
3. 是否应该 fork photon_rs 手动移除依赖
这是可行方案,但维护成本较高:
- 如果
photon-rs v0.3.2中的wasm-bindgen仅服务于 WASM 功能,你可以 fork 仓库后,将wasm-bindgen移至特性依赖,或直接删除相关代码; - 但后续需要自行维护 fork 版本,接收上游更新,仅在其他方案均无效时建议采用。
4. 其他可行解决方案
- 升级 photon_rs:检查 photon_rs 新版本(如 0.4+),新版本可能已升级
wasm-bindgen依赖版本,与 Tauri 兼容; - 替换图像处理库:改用
image库,它是 Rust 生态中成熟的图像处理库,无不必要的 WASM 依赖,能满足大部分图像处理需求; - 排查依赖树:运行
cargo tree -p wasm-bindgen查看完整依赖路径,定位强制引入特定版本的 crate,针对性调整其特性或版本。
内容的提问来源于stack exchange,提问作者Jamis Charles
相关产品推荐
相关产品推荐

