gpt4 book ai didi

npm - 当预发布版本是最新可用版本时,semver 中的插入符号 (^) 是否与预发布匹配?

转载 作者:行者123 更新时间:2023-12-04 12:16:06 24 4
gpt4 key购买 nike

考虑使用这些版本的库(例如 NPM 包):

  • 1.0.0
  • 1.0.2
  • 1.1.0-预发布

  • 如果我指定 ^1.0.0在我的依赖项中,将安装什么版本? 1.1.0-prerelease是最新版本,但我认为没有任何预发布版本满足我未指定预发布部分的范围。我试过使用 https://semver.npmjs.com ,但 lodash 没有预发布也是最新的情况。

    最佳答案

    通常是带有插入符号 ( ^ ) 前缀的范围,例如 ^1.0.0不会导致预发布版本 1.1.0-prerelease正在安装。
    因此,鉴于您的问题中提供的示例,通常安装的版本是 1.0.2 .
    注:然而,这种逻辑可能并不总是如此——我将很快解释原因。

    使用 Semver 计算器的典型逻辑示例:
    在撰写本文时,使用 Semver Calculator 说明典型逻辑的更好示例是使用 typescript 进行测试。而不是 lodash .
    使用 semver calculator :

  • typescript作为包
  • 输入范围 ^4.0.0

  • 如您所见,它选择 4.0.2并且不选择 4.2.0-dev.20201204 (在 4.0.2 之后发布到 npm 注册表)。这种逻辑通常是会发生的事情。
    典型的上述逻辑何时会有所不同:
    你会注意到,在我之前的解释中,我经常说“通常”。我这么说是因为 npm 有一个 dist-tag允许包的发布者修改分发标签的功能。 dist-tag 文档的简短摘录如下:

    By default, the latest tag is used by npm to identify the current version of a package, and npm install <pkg> (without any @<version> or @<tag> specifier) installs the latest tag. Typically, projects only use the latest tag for stable release versions, and use other tags for unstable versions such as prereleases.


    所以,如果我们再次考虑 typescript上一节中描述的示例。如果发布者关联了 latest在 npm 注册表中标记版本为 4.2.0-dev.20201204 .例如,如果他们运行以下命令:
    npm dist-tag add typescript@4.2.0-dev.20201204 latest
    然后版本 4.0.2将不会安装(假设 semver 范围为 ^4.0.0 ),而是版本 4.2.0-dev.20201204将会被安装。
    同样,鉴于您的问题中提供的示例,如果我们要关联 latest带有版本的标签 1.1.0-prerelease (使用 npm dist-tag ... 命令),并给出指定为 ^1.0.0 的范围在 dependencies package.json 的一部分,然后是版本 1.1.0-prerelease将被安装而不是 1.0.2 .
    注:我认为本节中描述的这些场景非常罕见(它们当然不是典型但易于理解),因为正如之前文档摘录中所述:

    Typically, projects only use the latest tag for stable release versions



    附加信息:
    利用 npm view命令来发现有关包 dist 标签的信息,尤其是 latest标签。例如:
  • 以下命令打印 typescript 的所有标签信息包裹:
    npm view typescript dist-tags
  • 以下命令打印与 latest 关联的版本typescript 的标签包裹:
    npm view typescript dist-tags.latest

  • 有关分发标签的更多信息,请参阅 adding dist-tags to packages .

    关于npm - 当预发布版本是最新可用版本时,semver 中的插入符号 (^) 是否与预发布匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64916954/

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