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

Rust嵌套Crate特性传播失败,如何正确配置?

Rust嵌套Crate特性传递问题:未找到web_sys::GpuAdapter

问题场景

我有三个嵌套的Rust Crate:

  • 库Crate A
  • 依赖Crate A的库Crate B
  • 依赖Crate B的二进制Crate C

当前各Crate的Cargo.toml配置如下:

CrateA/Cargo.toml

[features]
webgpu = [
    "web-sys", 
    'web-sys/Document',
    'web-sys/Element',
    'web-sys/GpuAdapter', 
    ...
]

CrateB/Cargo.toml

[features]
webgpu = ["CrateA/webgpu"]

[dependencies]
CrateA = {path = "../CrateA", default-features = false}

CrateC/Cargo.toml

[dependencies]
CrateB = {path = "../CrateB" , features = ["webgpu"], default-features = false}

构建Crate C时触发如下错误:

error[E0432]: unresolved import `web_sys::GpuAdapter`
  |
8 | use web_sys::GpuAdapter;
  |     ^^^^^^^^^^^^^^^^^^^ no `GpuAdapter` in the root

已知web_sys::GpuAdapter仅在启用web-sys/GpuAdapter特性时才会被定义,需修正配置让特性正确传递。

解决方案

问题核心是Cargo的特性传递规则没有让web-sys的目标特性在Crate C的依赖树中生效。每个Crate的依赖实例是独立的,若Crate C直接引用web-sys的类型,必须确保该依赖实例的对应特性被启用。

修复步骤

  1. 调整Crate B的特性配置:
    让webgpu特性不仅传递Crate A的webgpu特性,还要显式关联web-sys的所需特性(若Crate B或Crate C直接使用web-sys类型)。修改CrateB/Cargo.toml:

    [features]
    webgpu = [
        "CrateA/webgpu",
        "web-sys/GpuAdapter",
        "web-sys/Document",
        "web-sys/Element"
    ]
    
    [dependencies]
    CrateA = {path = "../CrateA", default-features = false}
    # 将web-sys声明为可选依赖,通过特性启用
    web-sys = {version = "0.3", default-features = false, optional = true}
    
  2. 确保Crate C的依赖特性生效:
    若Crate C直接引入了web-sys,需在CrateC/Cargo.toml中明确启用对应特性(可选,若已通过Crate B传递则可省略):

    [dependencies]
    CrateB = {path = "../CrateB", features = ["webgpu"], default-features = false}
    # 仅当Crate C直接依赖web-sys时添加
    # web-sys = {version = "0.3", default-features = false, features = ["GpuAdapter", "Document", "Element"]}
    

关键原理

Cargo的特性是针对依赖实例生效的:Crate A启用的web-sys特性仅作用于Crate A自身的web-sys依赖实例,Crate C的web-sys实例(如果直接依赖)需要单独启用特性;若Crate B作为中间层,需通过自身特性把web-sys的特性传递给下游依赖,确保整个依赖树中用到的web-sys实例都启用了目标特性。

内容的提问来源于stack exchange,提问作者YeomHyeonSeop

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:52:44