Модуль 7 · Публикация крейтов
Подготовка к публикации
Перед публикацией на crates.io нужно правильно заполнить Cargo.toml и проверить крейт командой cargo publish --dry-run.
📖 Теория 🕐 ~20 минут
📋
Cargo.toml — обязательные поля
Для публикации нужно заполнить больше полей чем при обычной разработке:
Cargo.toml
[package]
name = "my-awesome-lib" # уникальное имя на crates.io
version = "0.1.0" # начинайте с 0.1.0
edition = "2021"
# Необязательные но рекомендуемые:
description = "Краткое описание — одна строка"
license = "MIT OR Apache-2.0" # стандартная для Rust-крейтов
authors = ["Your Name "]
repository = "https://github.com/you/my-awesome-lib"
homepage = "https://example.com"
documentation = "https://docs.rs/my-awesome-lib"
readme = "README.md" # путь к README файлу
keywords = ["keyword1", "keyword2"] # макс. 5
categories = ["data-structures"] # из списка crates.io
[dependencies]
# Только зависимости из crates.io (не path/git)
license — используйте SPDX-идентификаторы. Стандарт Rust:
MIT OR Apache-2.0. Без лицензии крейт нельзя использовать в проектах.keywords — влияют на поисковую выдачу на crates.io. Максимум 5 слов.
categories — из фиксированного списка crates.io/category_slugs. Максимум 5.
🧪
cargo publish --dry-run — проверка
Терминал
cargo publish --dry-run # проверить без отправки
cargo package # создать .crate файл и показать его содержимое
cargo package --list # только список файлов которые войдут в пакет
--dry-run выполняет все проверки кроме фактической загрузки. Покажет ошибки если что-то не так с метаданными или зависимостями.
💡
cargo package --list покажет все файлы которые попадут в пакет. Убедитесь что нет секретных файлов (.env, credentials и т.д.).🚫
Что исключить из пакета
По умолчанию в пакет попадает всё кроме того что в .gitignore. Можно явно управлять через Cargo.toml:
Cargo.toml
[package]
# Исключить папки/файлы из пакета:
exclude = [
"tests/fixtures/*",
"benches/",
"*.png",
]
# Или наоборот — явно включить только нужное:
include = [
"src/**",
"Cargo.toml",
"README.md",
"LICENSE*",
]
📌 Что важно запомнить
→ Обязательные поля публикации: name, version, edition, license, description
→ cargo publish --dry-run — проверить всё без отправки
→ cargo package --list — посмотреть что войдёт в пакет
→ include/exclude — управлять содержимым пакета