【问题标题】:npm `wanted` vs `latest`npm `wanted` vs `latest`
【发布时间】:2015-09-21 07:45:03
【问题描述】:

我使用npm 来安装一些命令行工具。渴望始终保持最新状态,我找到了命令npm -g outdated。

wanted 和 latest 列有什么区别?

文档说明:

结果字段 'wanted' 根据 package.json 中指定的版本,字段 'latest' 非常 最新版本的软件包。

但是我一点也不明白。 例如在我的系统上我得到:

Package  Current  Wanted  Latest  Location
cordova    5.3.1   5.3.3   5.3.1  lib
npm        3.3.4   3.3.4   3.3.3  lib

wanted 怎么可能高于latest?好像有点矛盾:

“最新”字段是软件包的最新版本

我应该更新到哪个版本(我只使用命令行,而不是任何 node.js 代码)?

【问题讨论】:

  • 你使用什么版本的 npm?这根本没有任何意义。根据 npmjs.com,那些想要的版本甚至都不存在
  • npm --version 表示3.3.4,与npm -g outdated 显示的内容相符。
  • outdated 命令使用 npmjs.com 来分级版本号,并且网站声明 3.3.3 确实是“最新的”npmjs.com/package/npm。这可以解释数字的差异。但是,您是如何获得 3.3.4 的却是个谜。也许它需要一个测试版或其他什么?
  • wanted 的值在哪里?老实说,最初我是npm -g update。然后当我看到npm 仍然在过期列表中时,我做了npm -g update npm。不确定是否相关。
  • NPM documentation on the outdated command 似乎已更新,现在清楚地描述了差异:

标签: node.js npm


【解决方案1】:

wanted 字段在 --global 运行的上下文中没有意义,因为没有 package.json 来定义您需要的版本。

我应该更新到哪个版本(我只使用命令行,而不是任何 node.js 代码)?

如果您喜欢生活在边缘,最新版本似乎是一个不错的选择。

通缉的专栏好像是个bug,在github上报告了manytimes。

更新(检查来源后)

文档似乎有点误导,所以让我们澄清一下:

结果字段 'wanted' 根据 package.json 中指定的版本显示最新版本...

由于没有全局 package.json,所以使用的版本约束是'*'(设置here)。

那么想要的版本就是根据semver的包的最新版本。

“最新”字段是软件包的最新版本。

这不是真的,你得到的是dist-tag“最新”,它通常匹配最新版本(见here)。有一些包使用这些标签来管理显示的内容(如 npm)。

我应该更新到哪个版本(我只使用命令行,而不是任何 node.js 代码)?

似乎边缘是想要的。

【讨论】:

  • 很好的答案!一个更正:手动安装的全局包将有dep.package._requested.spec(_requested.spec 添加到模块package.json 文件)而不是*,这是安装请求的版本规范。所以在npm install -g eslint@4.0.0 之后,想要的版本将是 4.0.0 而不是最新的。
【解决方案2】:

更新:

在我的机器上目前npm -g outdated 显示:

Package         Current  Wanted  Latest  Location
babel-cli        6.1.18   6.2.0   6.2.0
generator-rise    1.7.0   2.1.0   2.1.0
npm               3.3.6   3.5.0   3.4.1

3.5.0 版本在 github 上作为一个版本存在,但尚未发布到 npm。所以它以某种方式从那里被拾起,但掩盖了 npm 源我找不到任何证据来支持这个论点。


来自official documentation:

结果字段 'wanted' 根据 package.json 中指定的版本,字段 'latest' 非常 包的最新版本。

详细说明:

npm 允许您在 package.json 中指定一系列版本,示例可用here。指定范围内可容纳的最大版本为wanted 列。

这可能与安装的版本不同(如果有的话),因为 package.json 可能同时发生了变化,或者作者可能在两者之间推送了一个新的次要版本。

【讨论】:

  • 但是没有package.json,因为它使用--global 运行
  • npm@3.5.0 是在 npm 中发布的,但它没有被 dist 标记为最新,所以它不会显示在页面上。
【解决方案3】:

考虑到您的示例,cordova@5.3.3 被标记为“wanted”,但“latest”是 cordova@5.3.1,因为 npm 使用 dist-tags 来管理其最新和下一个发布渠道。

npm update 将安装最新版本,但 npm install cordova(没有 semver 范围)将安装标记为最新的任何内容。

link to documentation

【讨论】:

    猜你喜欢
    • 2018-09-18
    • 2017-10-20
    • 2019-03-16
    • 2019-02-01
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多