首页 > 解决方案 > semver + latest 具有 NPM 依赖项

问题描述

一个有效的 NPM 依赖可能如下所示:

dependencies:{
  "lodash":"latest"
}

但我像这样使用 semver:

semver.eq('2.1.3','latest');

然后我得到:

TypeError: Invalid Version: latest

有没有办法用 semver 或临时处理“最新”?

标签: npmsemantic-versioning

解决方案


有没有办法用 semver 处理“最新”......?

不,不使用semver包本身,因为它不知道“最新”是什么。存储在 npm 注册表中的元数据将给定包的“最新”与 semver 相关联。

考虑使用or删除npm-view命令,以检索 npm 注册表1中包的“最新”semver 。然后将返回值作为第二个参数传递给比较。execSync()exec()semver.eq(...)

例如:

const semver = require('semver');
const execSync = require('child_process').execSync;

function getLatestVersion(pkg) {
  return JSON.parse(execSync(`npm view ${pkg} version --json`,
      { stdio: ['ignore', 'pipe', 'pipe'] }).toString());
}

const isEqual = semver.eq('2.1.3', getLatestVersion('lodash'));
console.log(isEqual); // --> false

  1. 正如您从这里的上一个问题中了解的那样。'latest'版本的确切解析是'stable''alpha''beta''rc'等可能会有所不同。但是,如果包所有者已正确发布更新,则它很可能是'stable'

推荐阅读