-6ren">
gpt4 book ai didi

node.js - Bower(和 npm)版本语法是什么?

转载 作者:IT老高 更新时间:2023-10-28 21:44:52 26 4
gpt4 key购买 nike

Bower 使我能够使用以下语法指定包的版本要求:

"dependencies": {
"<name>": "<version>",
},

但我一直无法找到用于 <version> 的语法是什么。 .我知道我可以指定版本为:
  • 大于某个版本 ">1.0.0"
  • 大于或等于一个版本:">=1.0.0"
  • 或在某个范围内:"1.0.0 - 2.0.0" .

  • 我也知道有一个包含波浪号的通用版本语法: "~1.0.0" .但我不确定它是什么意思以及它是否与 "=1.0.0" 相同.

    我也很想知道我是否能够指定多个非连续版本,例如恰好 1.0.3加上大于 1.5.0 的版本等等...

    最佳答案

    简而言之,Bower 版本号(和 NPM 的)的语法称为 SemVer,它是“语义版本控制”的缩写。您可以在 the semver parser within Node/npm 的 API 上找到有关 Bower 和 NPM 中使用的 SemVer 的详细语法的文档。 .你可以在 semver.org 了解更多关于底层规范(它没有提到 ~ 或其他语法细节)。 .

    有一个 super-handy visual semver calculator你可以玩,使所有这些更容易理解和测试。

    SemVer 不仅仅是一种语法!关于发布 API 的正确方法,它有一些非常有趣的事情要说,这将有助于理解语法的含义。至关重要的是:

    Once you identify your public API, you communicate changes to it with specific increments to your version number. Consider a version format of X.Y.Z (Major.Minor.Patch). Bug fixes not affecting the API increment the patch version, backwards compatible API additions/changes increment the minor version, and backwards incompatible API changes increment the major version.



    所以,你关于 ~ 的具体问题与 Major.Minor.Patch 模式相关。 (相关的插入符操作符 ^ 也是如此。)您可以使用 ~缩小您愿意接受的版本范围:
  • 后续 补丁级别 更改为相同的次要版本(“不影响 API 的错误修复”),或:
  • 后续 未成年人更改为相同的主要版本(“向后兼容的 API 添加/更改”)

  • 例如:要表明您将在 1.2.x 树上进行任何后续补丁级别更改,从 1.2.0 开始,但小于 1.3.0,您可以使用:
    "angular": "~1.2"
    or:
    "angular": "~1.2.0"

    这也可以获得与使用 .x 相同的结果。句法:
    "angular": "1.2.x"

    但是,您可以使用波浪号/ ~语法更具体:如果您只愿意接受从 1.2.4 开始但仍小于 1.3.0 的补丁级别更改,则可以使用:
    "angular": "~1.2.4"

    向左移动,朝向主要版本,如果您使用...
    "angular": "~1"

    ……和……一样
    "angular": "1.x"
    or:
    "angular": "^1.0.0"

    ...并匹配任何高于 1.0.0 且低于 2.0 的次要或补丁级别更改:

    请注意上面的最后一个变体:它被称为“插入符范围”。插入符号看起来非常像 > ,所以你可以原谅它的意思是“任何大于 1.0.0 的版本”。 (我当然在这方面滑倒了。)不!

    插入符号范围基本上用于表示您只关心最左侧的有效数字 - 通常是主要版本 - 并且您将允许任何不影响最左侧数字的次要或补丁级别更改。然而,与指定主要版本的波浪号范围不同,插入符范围允许您指定精确的次要/补丁起始点。所以,虽然 ^1.0.0 === ~1 , 插入符号范围,例如 ^1.2.3让你说你会接受任何改变 >=1.2.3 && <2.0.0 .你不能用波浪号范围做到这一点。

    当您近距离观察时,这一切乍一看似乎令人困惑。但是缩小一秒钟,然后这样想: 插入符号只是让您说您最关心最左边的任何有效数字。波浪号让你说你最关心最右边的那个数字。 剩下的就是细节。

    波浪号和插入符号的表达能力解释了为什么人们比简单的 .x 更能使用它们。语法:它们只是让您做更多的事情。这就是为什么即使在 .x 的地方你也会看到经常使用波浪号的原因会服务。举个例子,看 npm 本身:它自己的 package.json 文件在 ~2.4.0 中包含了很多依赖项。格式,而不是 2.4.x它可以使用的格式。通过坚持 ~ ,语法在 70 多个版本依赖项列表中一直保持一致,无论哪个补丁号是可接受的。

    无论如何,SemVer 还有更多内容,但我不会在这里详细介绍。在 node semver package's readme 上查看.和 请务必使用 semantic versioning calculator 当您正在练习并试图了解 SemVer 的工作原理时。

    RE:非连续版本号:OP 的最后一个问题似乎是关于指定非连续版本号/范围(如果我已经对其进行了合理编辑)。是的,您可以使用常见的双管道“或”运算符来做到这一点: || .像这样:
    "angular": "1.2 <= 1.2.9 || >2.0.0"

    关于node.js - Bower(和 npm)版本语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19030170/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com