rust 編程語言的包 (或者 庫
, library) 叫做 crate
, 也就是軟件中的一個組件. 一個完整的軟件通常由多個 crate 組成, rust 編譯器 (rustc
) 一次編譯一整個 crate, 不同的 crate 可以同時并行編譯.
rust 官方有一個集中發布開源包的網站 crates.io
. 發布在這上面的 crate 可以很方便的在自己的項目中依賴使用, 國內也有這個網站的加速鏡像.
本文介紹發布 crate 的過程.
相關鏈接:
-
《ibus 源代碼閱讀 (1)》 https://blog.csdn.net/secext2022/article/details/136099328
-
https://www.rust-lang.org/
-
https://crates.io/
國內鏡像: https://rsproxy.cn/
目錄
-
1 編寫
Cargo.toml
-
2 登錄
crates.io
-
3 發布源碼包
-
4 總結與展望
1 編寫 Cargo.toml
在發布之前, 需要仔細檢查一下 Cargo.toml
文件, 比如:
[package]
name = "librush"
version = "0.1.0-a1"
edition = "2021"
license = "LGPL-2.1-or-later OR GPL-3.0-or-later"authors = ["secext2022 <secext2022@outlook.com>"]
description = "艾刷 (libRush = lib + IBus + Rust + h): 用 rust 編寫的 ibus 模塊, 不用 GObject (ibus module written in pure rust, without GObject) (輸入法, input method)"
repository = "https://github.com/fm-elpac/librush"
keywords = ["ibus", "input-method"]
categories = ["accessibility", "api-bindings", "localization"][[bin]]
name="ibrus"
path="src/bin.rs"[dependencies]
log = "^0.4.20"
serde = "^1.0.196"
serde_json = "^1.0.113"
zbus = { version = "^4.0.1", default-features = false }env_logger = "^0.11.1"tokio = { version = "^1.36.0", features = ["full"], optional = true }[build-dependencies]
built = { version = "^0.7.1" }
vergen = { version = "^8.3.1", features = ["build", "git", "gitcl"] }[features]
default = ["pmim"]
pmim = ["tokio", "zbus/tokio"]
async-io = ["zbus/async-io"]
下面對其中的一些重要字段進行說明: (參考文檔 https://doc.rust-lang.org/cargo/reference/manifest.html)
-
name
源碼包的名稱.和大部分編程語言的 標識符 的命名規則差不多. 只允許使用
0-9a-z
和-
_
字符, 最大長度 64.crates.io 對于名稱的管理原則是, 先到先得. 除非特殊情況, 誰先發布了某個名稱的源碼包, 這個名稱就歸誰所有. 這個類似于域名 (DNS) 的管理原則.
所以, 有喜歡的名稱快去搶啊 ~
-
version
源碼包的版本號.必須符合 語義化版本 2.0.0 https://semver.org/lang/zh-CN/
-
edition
rust 編程語言的大版本.rust
1.0
版本以后, 必須保持很強的向后兼容性, 不能破壞已有的代碼. 為了在兼容的同時, 能夠繼續健康發展 (避免歷史包袱), rust 提出了 edition 機制.每 3 年推出一個 edition, 目前有: 2015, 2018, 2021. 不同 edition 的代碼不兼容.
參考文檔 https://doc.rust-lang.org/edition-guide/editions/index.html
-
license
源碼包使用的開源許可證.許可證的列表可以在這個網站查找: https://spdx.org/licenses/
-
authors
作者. -
description
源碼包的描述, 比較簡短 (可以使用中文). -
repository
對應源代碼倉庫的 URL. -
keywords
關鍵詞.有助于搜索到這個源碼包. 最多 5 個, 只能使用 ASCII 字符, 每個關鍵詞的最大長度 20. 這個對中文不太友好, 必須差評 !
-
categories
源碼包所屬的分類.最多 5 個, 只能從這個列表中選擇: https://crates.io/category_slugs
區區幾個字段, 每個字段都對應一大堆不同的規則. 想搞懂所有這些還真不容易呢 !
除了 Cargo.toml
文件, 還要檢查一下 README.md
文件, 這個是項目的說明文件, 別人點進去首先看到的東西.
最后使用命令 cargo doc
編譯一下文檔, 在本地先看看文檔是否還需要補充.
2 登錄 crates.io
打開 crates.io
, 點擊右上角的 Log in with GitHub
登錄.
登錄之后, 點擊右上角的 Account Settings
.
點擊左側的 API Tokens
, 然后創建一個新的 token. 在本地運行命令:
> cargo login --registry crates-io
粘貼剛剛創建的 token, 完成登錄.
3 發布源碼包
在項目的根目錄運行命令:
> cargo publish --registry crates-io
耐心等待, 這個會把要發布的源碼包重新編譯一遍, 可能需要比較長的時間. 編譯完后就會發布了.
發布之后就能在 My Crates
看到了.
4 總結與展望
crates.io
是 rust 源碼包集中發布的地方, 發布一個 crate 還是比較簡單的.
如果有 rust 代碼需要分享, 建議發在這里, 使用起來就會很方便.
本文使用 CC-BY-SA 4.0 許可發布.