从零开始编写一个库到crates中心
Contents
注册账号
它暂时只能用 Github 登录
获取 token
注册成功并登录后, 进入 Account Settings
找到 API Access
部分生成 Token
这里, 假设你的 token 为 tokenxxx
使用 cargo 登录
$ cargo login tokenxxx
Login token for `crates.io` saved
创建一个库项目
cargo new ipdbv4-rs
然后编写你的库代码. 目录类似
├── Cargo.lock
├── Cargo.toml
├── README.md
├── ipipfree.ipdb
├── rustfmt.toml
├── src
│ ├── benches
│ │ └── my_benchmark.rs
│ ├── helper.rs
│ ├── lib.rs
│ └── main.rs
完善你的元数据
[package]
name = "ipdb_rs"
version = "0.1.0"
authors = ["emacsist <emacsist@qq.com>"]
edition = "2018"
description = "IPDB 地址库的 rust 非官方版本"
keywords = ["ipdb", "rust"]
categories = ["parsing"]
readme = "README.md"
license = "MIT OR Apache-2.0"
repository = "https://github.com/emacsist/ipdb-rs.git"
exclude = [
"ipipfree.ipdb",
]
以上几个最好都用
格式化代码
# 安装 fmt
rustup component add rustfmt
# 使用
cargo fmt
代码检查
# 安装 clippy
rustup component add clippy
# 检查
cargo clippy
# 自动应用检查的建议. 要使用 nightly 版本
rustup component add rustfmt --toolchain nightly
cargo +nightly clippy --fix -Z unstable-options
查看打包时包含的文件列表
cargo package --list
根据自己的情况修改. 比如上面的, 我添加了 exclude=["ipipfree.ipdb"]
发布
cargo publish
移除版本
它不能删除旧版本的包, 但可以阻止新的项目使用该版本的包
cargo yank --vers 1.0.1
# 取消移除
cargo yank --vers 1.0.1 --undo
遇到的问题
crate lazy_static
is pulled from registry
https://github.com/rust-lang/crates-io-cargo-teams/issues/21
这通常是因为使用了镜像. 你懂的…
可以在 publish 的时候, 直接指定官方源即可.
cargo publish --index https://github.com/rust-lang/crates.io-index --token tokenxxx
输出类似如下就成功了
Updating crates.io index
Packaging ipdb_rs v0.1.0 (/home/emacsist/rust/ipdbv4)
Verifying ipdb_rs v0.1.0 (/home/emacsist/rust/ipdbv4)
Updating `https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git` index
Downloaded serde_json v1.0.56 (registry `https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git`)
Downloaded 1 crate (114.5 KB) in 4.97s
Compiling proc-macro2 v1.0.18
Compiling unicode-xid v0.2.1
Compiling syn v1.0.33
Compiling serde_derive v1.0.114
Compiling serde v1.0.114
Compiling ryu v1.0.5
Compiling serde_json v1.0.56
Compiling itoa v0.4.6
Compiling lazy_static v1.4.0
Compiling quote v1.0.7
Compiling ipdb_rs v0.1.0 (/home/emacsist/rust/ipdbv4/target/package/ipdb_rs-0.1.0)
Finished dev [unoptimized + debuginfo] target(s) in 54.18s
Uploading ipdb_rs v0.1.0 (/home/emacsist/rust/ipdbv4)
可以看到, 发布的仓库为 https://crates.io/crates/ipdb_rs
即 https://crates.io/crates/你的包名
, 包名就是在 Cargo.toml
里的
[package]
name = "ipdb_rs"