#版本化 #cargo #版本 #语义 #数字 #评估器 #预发布

no-std semver

Cargo 的语义版本化风格的解析器和评估器

40 个版本 (23 个稳定版)

1.0.23 2024年5月7日
1.0.22 2024年2月19日
1.0.21 2024年1月2日
1.0.20 2023年10月9日
0.1.3 2014年11月21日

#4 in 解析器实现

Download history 2199481/week @ 2024-05-03 2342782/week @ 2024-05-10 2334604/week @ 2024-05-17 2265003/week @ 2024-05-24 2519760/week @ 2024-05-31 2462094/week @ 2024-06-07 2422974/week @ 2024-06-14 2523984/week @ 2024-06-21 2346978/week @ 2024-06-28 2422543/week @ 2024-07-05 2533594/week @ 2024-07-12 2620024/week @ 2024-07-19 2608547/week @ 2024-07-26 2594435/week @ 2024-08-02 2709578/week @ 2024-08-09 2201558/week @ 2024-08-16

每月下载量10,596,666
用于 21,182 个 crate(直接使用 1,428 个)

MIT/Apache

83KB
1.5K SLoC

semver

github crates.io docs.rs build status

Cargo 的语义版本化风格的解析器和评估器。

语义版本化(参见 https://semver.org)是关于如何分配和增加版本号的指南。在 Rust 的 Cargo/crates.io 生态系统中广泛遵循。

[dependencies]
semver = "1.0"

编译器支持:需要 rustc 1.31+


示例

use semver::{BuildMetadata, Prerelease, Version, VersionReq};

fn main() {
    let req = VersionReq::parse(">=1.2.3, <1.8.0").unwrap();

    // Check whether this requirement matches version 1.2.3-alpha.1 (no)
    let version = Version {
        major: 1,
        minor: 2,
        patch: 3,
        pre: Prerelease::new("alpha.1").unwrap(),
        build: BuildMetadata::EMPTY,
    };
    assert!(!req.matches(&version));

    // Check whether it matches 1.3.0 (yes it does)
    let version = Version::parse("1.3.0").unwrap();
    assert!(req.matches(&version));
}

本 crate 的范围

除了 Cargo,其他一些语言的其他包生态系统和包管理器也使用 SemVer:RubyGems/Bundler 用于 Ruby,npm 用于 JavaScript,Composer 用于 PHP,CocoaPods 用于 Objective-C...

semver crate 旨在特别实现 Cargo 对语义版本化的解释。

在各个工具在规范的解释或实现上存在差异时,此 crate 遵循 Cargo 所做的实现选择。如果你正在处理来自其他包生态系统的版本号,你将需要使用适合该生态系统的其他 semver 库。

Cargo 的 SemVer 支持范围在 Cargo 参考文档的“指定依赖项”章节中有记录。


许可证

根据您的选择,受 Apache 许可证 2.0 版MIT 许可证 许可。
除非您明确表示,否则您根据 Apache-2.0 许可证定义的任何旨在包含在此 crate 中的贡献,都将按上述方式双重许可,没有任何额外的条款或条件。

依赖项

~165KB