You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

问题

  1. 能否从 Tauri 侧禁用 WASM 依赖?
  2. 还有哪些强制指定版本的方法?
  3. 是否应该 fork photon_rs 手动移除不需要的依赖?
  4. 还有其他可行的解决方案吗?

解答

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.95
    
    若 photon-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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 02:32:06