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

MacOS下构建Leptos项目到wasm32-unknown-unknown目标时出现ring依赖构建错误的解决办法咨询

MacOS下构建Leptos项目到wasm32-unknown-unknown目标时出现ring依赖构建错误的解决办法咨询

这个问题我之前在自己的Leptos全栈项目里也碰到过,核心原因就是ring库本身不支持wasm32-unknown-unknown目标,而你的项目里jsonwebtoken和surrealdb又都间接依赖了它。结合Leptos的全栈特性,给你几个可行的解决思路:


方案一:用条件编译分离前后端依赖

Leptos作为全栈框架,前端(wasm)和后端(native)的依赖其实完全可以分开配置,避免把后端专属的依赖打包到wasm中。

修改你的Cargo.toml,把依赖拆成三类:

[package]
name = "libro_commerce"
version = "0.1.0"
edition = "2024"

# 前后端通用依赖
[dependencies]
leptos = "0.8.6"
serde = { version = "1.0.219", features = ["derive"] }
serde_json = "1.0.142"

# 仅后端(非wasm)需要的依赖
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
argon2 = "0.5.3"
dotenv = "0.15.0"
jsonwebtoken = "9.3.1"
reqwest = { version = "0.12.23", features = ["json"] }
surrealdb = "2.3.7"
tokio = { version = "1.47.1", features = ["full"] }
tracing = "0.1.41"
tracing-subscriber = "0.3.19"

# 如果前端需要JWT解析(仅解析payload,不需要签名/验证),可以单独加轻量依赖
[target.'cfg(target_arch = "wasm32")'.dependencies]
# 比如用`jwt-simple`的wasm版本,或者直接用serde手动解析

这样执行cargo build --target wasm32-unknown-unknown时,只会编译前端需要的依赖,完全不会触碰到依赖ring的后端包。


方案二:替换为支持wasm的替代库

如果你的前端确实需要处理JWT或者数据库交互,可以换成支持wasm的替代方案:

  • JWT处理:把jsonwebtoken换成jwt-simple,它原生支持wasm目标,API风格和jsonwebtoken接近;如果只需要解析JWT的payload,甚至可以直接用serde_json手动解析,不需要完整的JWT库。
  • SurrealDB交互:SurrealDB官方提供了web客户端支持,给surrealdb启用web特性并禁用默认后端特性,它就会切换到支持wasm的依赖链:
    surrealdb = { version = "2.3.7", features = ["web"], default-features = false }
    
    注意这种方式下,SurrealDB的调用API会和后端有所差异,需要使用web客户端的逻辑。

方案三:补丁/分支兼容(不推荐)

虽然有第三方补丁或者fork的ring分支尝试支持wasm,但这种方式稳定性差,容易出现版本兼容问题,只适合临时测试,不建议在生产环境使用。


最后再确认一下你已经安装了wasm目标工具链:

rustup target add wasm32-unknown-unknown

我当时用方案一解决了问题,把数据库、JWT签名这类后端逻辑完全放在native侧,前端只负责UI和调用后端API,既避开了wasm的依赖坑,也符合全栈项目的职责分离逻辑。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 07:18:01