如何发布携带未设为默认特性的可选依赖的Rust crate
带有非默认可选依赖的crate正确发布方案
发布命令选择
- 直接执行
cargo publish即可,无需添加--all-features参数:cargo publish携带的feature参数仅作用于本地发布前的预编译校验环节,上传到crates.io的是完整源码包,不会绑定任何本地启用的feature配置,既不影响下游用户的feature选择,也不会改变后续文档构建的规则。 - 如果你需要在发布前确认所有feature下的代码可正常编译,可提前单独执行
cargo check --all-features做预校验即可,不需要将该参数带入publish命令。
解决docs.rs不展示可选依赖对应模块的问题
你遇到的文档缺失问题和发布命令无关,核心原因是docs.rs默认仅使用default特性构建文档,非默认的可选依赖对应的#[cfg(feature = "xxx")]模块自然不会被渲染。需要在Cargo.toml中添加专门的文档构建配置:
[package.metadata.docs.rs] # 开启所有特性构建文档,适合可选依赖数量少的场景 all-features = true # 也可以手动指定需要开启的特性,适合需要排除部分内部测试特性的场景 # features = ["serde", "async"]
添加上述配置后重新发布,docs.rs会自动按照你指定的特性规则构建文档,所有对应特性开启下的模块都会正常展示在公开文档中。
内容的提问来源于stack exchange,提问作者hzqelf
相关产品推荐
相关产品推荐

