无需发布依赖 crate,如何打包 monorepo 中的关联项目?
解决Monorepo中本地依赖包的Cargo打包问题
要在不发布package_one到crates.io的前提下打包package_two,可以用以下几种方法:
方法一:使用Cargo工作区(推荐)
将整个monorepo组织成Cargo工作区,Cargo会自动识别工作区内的本地依赖,无需去crates.io校验:
- 在monorepo根目录创建
Cargo.toml,定义工作区成员:
[workspace] members = [ "package_one", "package_two", ]
- 保持
package_two/Cargo.toml中的依赖配置不变(同时指定path和version):
[dependencies] package_one = { path = "../package_one", version = "0.2.0" }
- 直接在
package_two目录执行打包命令即可:
cargo package
方法二:跳过依赖验证打包
如果不想使用工作区,可以通过--no-verify参数跳过Cargo对依赖可获取性的校验,直接生成本地包:
cargo package --no-verify
注意:用这个命令生成的包无法发布到crates.io(因为依赖未在crates.io存在),仅适用于本地或内部使用场景。
方法三:Vendor本地依赖(离线打包场景)
如果需要将package_one一起打包到package_two的构建产物中,可以用Cargo的vendor功能:
- 在
package_two目录执行vendor命令,将依赖下载到本地vendor目录:
cargo vendor
- 在
package_two目录创建.cargo/config.toml,配置Cargo使用本地vendor源:
[source.crates-io] replace-with = "vendored-sources" [source.vendored-sources] directory = "vendor"
- 执行打包命令:
cargo package
内容的提问来源于stack exchange,提问作者Patrick Hallisey
相关产品推荐
相关产品推荐

