npm semver:如何按范围获取最新的预发行版本(具有不同的修补程序版本)

时间:2018-07-06 15:29:20

标签: npm

(我是npm的新手)我的npm项目依赖于npm-lib(我无法控制),正在发布“快照”版本,例如:

  • 1.0.0-rc
  • 1.0.1-rc
  • 1.0.2-rc ....

我想使用最新的rc版本,即:1.0.x-rc 这样,只要有新的rc,我的项目就可以获取最新的。

到目前为止,我尝试了多个sem版本,但没有运气:

  

semver.satisfies('1.0.2-rc','> = 1.0.0-rc')//假

     

semver.satisfies('1.0.2-rc','^ 1.0.0-rc')//假

是否可以存档?谢谢。


7月7日更新:

阅读源代码后,我认为不可能获得如示例中提到的具有不同补丁程序版本的最新rc。 https://github.com/npm/node-semver/blob/v5.5.0/semver.js#L1121

function testSet(set, version) {
  for (var i = 0; i < set.length; i++) {
    if (!set[i].test(version))
      return false;
  }
  if (version.prerelease.length) {
    // Find the set of versions that are allowed to have prereleases
    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
    // That should allow `1.2.3-pr.2` to pass.
    // However, `1.2.4-alpha.notready` should NOT be allowed,
    // even though it's within the range set by the comparators.
    for (var i = 0; i < set.length; i++) {
      debug(set[i].semver);
      if (set[i].semver === ANY)
        continue;
      if (set[i].semver.prerelease.length > 0) {
        var allowed = set[i].semver;
        if (allowed.major === version.major &&
            allowed.minor === version.minor &&
            allowed.patch === version.patch)
          return true;
      }
    }
    // Version has a -pre, but it's not one of the ones we like.
    return false;
  }
  return true;
}

实际上,文档中也提到了这一点: https://docs.npmjs.com/misc/semver#prerelease-tags

  

第二,选择使用预发行版本的用户已明确表明打算使用该特定的alpha / beta / rc版本集。通过在该范围中包含预发布标签,用户表示他们已经意识到风险。但是,假设他们选择对下一组预发行版本承担类似的风险仍然不合适,

我还检查了纱线:https://yarnpkg.com/en/docs/dependency-versions#toc-pre-release-tags

  

例如,范围> = 3.1.4-beta.2会匹配3.1.4-beta.2或3.1.4-beta.12,但即使是3.1.5-beta.1也不会匹配从技术上讲“大于或等于”(> =)3.1.4-beta.2版本。

     

预发行版本往往包含意外的重大更改,通常您不希望在指定版本之外匹配预发行版本,因此此行为很有用。

0 个答案:

没有答案