Cargo & crates.io
Cargo 相当于前端的 npm 命令行工具,https://crates.io相当于https://www.npmjs.com/
使用 cargo 构建项目
开发时构建:
发布时构建,添加—release 参数:
配置 Cargo.toml
Cargo.toml 相当于前端的 package.json,里边存放的项目的配置信息
opt-level 控制了 Rust 在编译时会对代码执行何种程度的优化,0-3 之间:
# 开发环境默认配置[profile.dev]opt-level = 0
复制代码
# 发布环境默认配置[profile.build]opt-level = 3
复制代码
编写有用的文档注释
使用三斜杠注释编写文档,支持 markdown 语法:
// src/lib.rs
/// 两数相加/// # Example/// ```/// let a = 1;/// let b = 2;/// assert_eq!(3, my_crates::add(a, b))/// ```pub fn add(a: i32, b: i32) -> i32 { a + b}
复制代码
本地预览文档:
常用的文档注释区域
将文档用做测试
当使用 cargo test 命令做测试时,文档中的 Example 也被会当做测试
# cargo test# ...Doc-tests my_cratesrunning 1 testtest src/lib.rs - add (line 3) ... oktest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.67s
复制代码
为整个包编写的文档
使用//!来为整个包编写文档
//! # My Crates//!//! 一系列工具集合,//! 用于数学操作
/// 两数相加/// ...
复制代码
预览查看:
使用 pub use 来导出合适的公共 API
当我们使用一个包时,当包的内部组织结构很复杂,我们需要了解其组织方式和路径,才能正确的引用,想想一下 JS 中的 export {} from 'xxx',例如使用下面这个库:
// src/lib.rs//! # Art//!//! 一个用来建模艺术概念的库
pub mod kinds { /// RYB模型三原色 pub enum PrimaryColor { Red, Yellow, Blue, }
/// RYB模型调和色 pub enum SecondaryColor { Orange, Green, Purple, }}
pub mod utils { use crate::kinds::*;
/// 将两种等量的原色混合生成调和色 pub fn mix(c1: PrimaryColor, c2: PrimaryColor) -> SecondaryColor { // 省略 SecondaryColor::Orange }}
复制代码
使用时需要了解其具体路径:
// src/main.rsuse art::kinds::PrimaryColor;use art::utils::mix;
fn main() { let red = PrimaryColor::Red; let yellow = PrimaryColor::Yellow; mix(red, yellow);}
复制代码
如果使用包的组织更加复杂,开发者体验会非常不好:
use some_lib::utils::common::safe::add
复制代码
使用 pub use 重新组织包的对外暴露方式:
// src/lib.rspub mod kinds { // ...}pub mod utils { // ...}
// 重新组织导出结构pub use self::kinds::PrimaryColor;pub use self::kinds::SecondaryColor;pub use self::utils::mix;
复制代码
使用时:
// src/main.rsuse art::PrimaryColor; // 直接引用需要的内容use art::mix;
fn main() { // ...}
复制代码
发布包需要有 crates.io 账号,首先在https://crates.io/me/创建 token,执行 login 命令,cargo 将会自动创建~/.cargo/credentials 文件中用于记录登录信息:
# logincargo login abcdefghijklmnopqrstuvwxyz012345
复制代码
为包前加元数据
元数据指的是一些关于包的基本信息:
[package]name = "package_name" # 独一无二的名字description = "package description" # 包的描述license = "MIT" # 许可协议version = "0.1.0" # 包版本authors = ["author <author@vipkid.com.cn>"]
复制代码
使用命令将包发布:
这一操作是永久性的。已经上传的版本将无法被覆盖,对应的代码也不能被删除。
撤销某个版本:
对于使用者的项目来说,所有已经产生 Cargo.lock 的项目将不会受到撤回操作的影响,而未来所有产生的新 Cargo.lock 文件将不会再使用已经撤回的版本。
取消撤回操作:
cargo yank --vers 1.0.1 --undo
复制代码
评论