如何在发布前连接本地 Rust crate:分步指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么本地 crate 不是奢侈品,而是必需品

\n\n

想象一下:您正在用 Rust 编写一个用于解析配置文件的库。它还很粗糙,尚未准备好发布到 crates.io,但您已经想在一个实际项目中测试它——比如基于 Actix 的 Web 服务器或 CLI 工具。该怎么办?复制代码?创建单体仓库?不,Rust 为此提供了一个优雅的解决方案——本地未发布的 crate。

\n\n

"How to use a local unpublished crate?" 这个问题在 Stack Overflow 上获得了数千次浏览。这并非偶然:每个 Rust 开发者迟早都会遇到需要连接自己尚未发布的 crate 的情况。在本文中,我们将探讨所有方法——从简单的指定路径到使用 Git 依赖和 workspaces。开始吧!

\n\n

什么是未发布的 crate,为什么需要它?

\n\n

未发布的 crate 是一个仅存在于您本地磁盘或私有仓库中的 Rust 包。它没有上传到 crates.io,其他开发者无法访问(除非您授予他们文件访问权限)。

\n\n

典型的使用场景:

\n
    \n
  • 与主项目并行开发库
  • \n
  • 重构:将部分代码提取到单独的 crate 中
  • \n
  • 无法公开发布的私有企业库
  • \n
  • 在发布前测试依赖项
  • \n
\n\n

主要优势是您可以完全控制代码,并可以立即进行更改,而无需等待发布到 crates.io。

\n\n

方法 1:路径依赖——最简单快捷

\n\n

这是基本方法,适用于两个项目(依赖项和依赖项目)都在您本地计算机上的情况。

\n\n

项目结构

\n\n

假设您有以下文件夹结构:

\n\n
my_project/\n├── my_lib/          # 未发布的 crate\n│   ├── Cargo.toml\n│   └── src/\n│       └── lib.rs\n└── my_app/          # 主项目\n    ├── Cargo.toml\n    └── src/\n        └── main.rs
\n\n

步骤 1:创建 my_lib 库

\n\n

在 my_lib/Cargo.toml 中:

\n\n
[package]\nname = "my_lib"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]
\n\n

在 my_lib/src/lib.rs 中编写一个简单的函数:

\n\n
pub fn greet(name: &str) -> String {\n    format!("你好,{}!这是一个本地 crate。", name)\n}
\n\n

步骤 2:通过路径将 my_lib 连接到 my_app

\n\n

在 my_app/Cargo.toml 中添加 [dependencies] 部分:

\n\n
[package]\nname = "my_app"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nmy_lib = { path = "../my_lib" }
\n\n

请注意:路径是相对于主项目的 Cargo.toml 文件指定的。如果库位于其他目录,请指定绝对路径或相对路径。

\n\n

步骤 3:在代码中使用 crate

\n\n

在 my_app/src/main.rs 中:

\n\n
use my_lib::greet;\n\nfn main() {\n    let message = greet("阿列克谢");\n    println!("{}", message);\n}
\n\n

运行:cargo run——您将看到输出:"你好,阿列克谢!这是一个本地 crate。"

\n\n

重要! 对 my_lib 的任何更改都将在下次构建 my_app 时自动生效。无需重新安装或更新版本。

\n\n

方法 2:Git 依赖——用于团队协作

\n\n

如果您在团队中工作或代码存储在 Git 中,最好使用 Git 依赖。当 crate 位于单独的仓库(即使是私有仓库)中时,这很方便。

\n\n

配置

\n\n

假设您的未发布 crate my_lib 位于仓库 https://github.com/yourname/my_lib.git 中。

博客

书籍推荐