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授权的方式绑定

地址:https://crates.io/

创建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

结束

恭喜!你成功了!庆贺吧!去搓一顿吧!!!