SuperAPI AI 工具集

rust-impl-workspaces

编程与开发

查看项目

更新于 10-16 08:50

技能介绍

用途:当同一仓库中存在多个 crate(二进制加库、CLI 加核心、微服务 monorepo、插件宿主加插件)时,用 Cargo 工作区作为组织单元,避免重复的 target/ 目录、依赖版本漂移和锁文件分裂。

主要能力:在根 Cargo.toml 声明 [workspace],用 members(支持 crates/* 通配)、default-members、exclude 管理成员;用 [workspace.package] 共享 edition、rust-version、license、authors 等元数据,成员以 field.workspace = true 继承;用 [workspace.dependencies] 统一依赖版本,成员写 dep = { workspace = true },可在调用处追加 features,但不能覆盖版本;用 [workspace.lints] 共享 lint 配置。resolver 必须写在根清单:edition 2024 用 "3"(Rust 1.84 起稳定,含 MSRV 感知解析),edition 2021 用 "2"。整个工作区只有一个 Cargo.lock 和根 target/;[patch]、[replace]、[profile.*]、[workspace.metadata] 只在根生效,成员级条目被忽略。

使用方式:多 crate 且无单一主导 crate 时优先虚拟工作区(根只有 [workspace],无 [package]),所有 crate 放在 crates/ 下。常用命令:cargo build --workspace、cargo test --workspace、cargo build -p my-core、cargo test --workspace --exclude legacy、cargo update -p serde、cargo tree --workspace。CI 中优先用 --workspace,因为根目录裸跑 cargo test 只覆盖 default-members。

限制与注意:不要在 [workspace.dependencies] 中写 optional = true,应在成员条目上标记;不要混用 resolver 版本,成员级 resolver 会被忽略;不要在每个成员重复声明依赖版本;exclude 应加注释说明原因;成员清单中放 [profile.release] 无效。资料未提供具体收费、平台或效果信息。