description: 自定义一个crate,并发布到crates.io,然后在项目中引用crate
自定义包并发布
1、首先得有个包
创建一个crate库
#![allow(unused)] fn main() { // 创建一个业务代码常用的自定义方法库businessfn cargo new --lib businessfn }
定义模块以及函数
目录结构如下:
businessfn:
----src
---------arr.rs
---------lib.rs
----.gitignore
----Cargo.lock
----Cargo.toml
----README.md
arr.rs:
/// 获取二维数组的列,返回一个包含该列所有值的一维数组 /// /// # Examples /// /// ``` /// use businessfn::hello; /// /// fn main() { /// hello(); /// } /// ``` pub fn array_columns() -> i64 { return 1 }
lib.rs:
#![allow(unused)] fn main() { /// 业务函数库 pub mod arr; // 加载arr同名文件的模块 pub fn hello() { let i = arr::array_columns(); println!("i num : {}", i); } }
Cargo.toml:
#![allow(unused)] fn main() { [package] name = "businessfn" description = "Some custom function libraries for business development" documentation = "https://github.com/finewenmu/businessfn/blob/master/README.md" homepage="https://github.com/finewenmu/businessfn" version = "0.1.0" license = "MIT" edition = "2021" repository = "https://github.com/finewenmu/businessfn" readme = "README.md" See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] }
编译发布版本
#![allow(unused)] fn main() { Cargo build --release }
2、其次得做些准备
注册一个github账号并且创建一个businessfn的仓库
注册github账号,点击[走你](https://github.com),自行注册即可,若有账号,继续下一步
创建github公开仓库,自行百度,不再赘述
然后你就有一个类似这样的仓库了 :https://github.com/finewenmu/businessfn
使用ssh-keygen生成本地秘钥。然后配置到github->setting->ssh设置中
这一步也不再细说,自行百度ssh-keygen -t rsa -c "xxx@gmail.com"
在businessfn中绑定你的仓库,并将代码push到仓库中
这一步也不再细说,自行百度git的使用
现在取crates.io注册一下账号,这个账号目前只能是用github授权的方式绑定
创建API token
注册授权登录之后,在个人中心->Account setting->Api Token页面,点击New Token即可生成
3、发布自定义库到Crates.io
本地登录Crates.io账号
打开终端执行命令:
cargo login [token]
// 比如
cargo login xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//提示登录成功
在项目businessfn根目录执行发布
$cargo publish
Updating crates.io index
Packaging businessfn v0.1.0
Verifying businessfn v0.1.0
Compiling businessfn v0.1.0
Finished dev [unoptimized + debuginfo] target(s) in 2.06s
Uploading businessfn v0.1.0
4、使用自定义库
创建一个项目
#![allow(unused)] fn main() { cargo new businessfn_test }
在Cargo.toml添加依赖
#![allow(unused)] fn main() { [dependencies] businessfn = "0.1.0" }
在main.rs中使用
use businessfn::hello; fn main() { hello(); }
运行
$cargo run
Updating crates.io index
Compiling businessfn v0.1.0
Compiling businessfn_test v0.1.0
Finished dev [unoptimized + debuginfo] target(s) in 5.52s
Running `target\debug\businessfn_test.exe`
i num : 1
结束
恭喜!你成功了!庆贺吧!去搓一顿吧!!!