Yarn: Yarn 使用匹配的 @next / 不稳定版本而不是像 NPM 那样最新匹配的稳定版本

创建于 2016-11-04  ·  3评论  ·  资料来源: yarnpkg/yarn

您要请求功能还是报告错误
Bug 🐜 😱 Yarn 选择与 NPM 不同的版本,并使用相同的版本说明符。

目前的行为是什么?

  • aes-decrypter在 npm 上: { latest: '1.0.3', beta: '1.0.0-0', next: '1.1.0' }
  • video.js在 npm 上: { latest: '5.11.9', next: '5.12.6', alpha: '5.9.0-2' }
  • videojs-contrib-hls取决于aes-decrypter@^1.0.3'video.js@^5.10.1
  • 我的包裹依赖于videojs-contrib-hls@^3.6.7中的package.json
{
  "name": "yarn-next-bug-test",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
    "videojs-contrib-hls": "^3.6.7"
  }
}
  • 没有yarn.lock
  • 运行yarn

安装并添加到 yarn.lock 的包是:

什么是预期行为?
NPM 用同样的 package.json 做了什么:

请提及您的 node.js、yarn 和操作系统版本。
node.js v7.0.0
纱线 v0.16.0 和 v0.19.0-0(f0d875a67a06d8b2405be177d0c43820442d802b 大师)都有错误
npm v3.10.9 和 v4.0.2 都做预期的事情
macOS Sierra 10.12.2 测试版 (16C32f)

最有用的评论

在通过 yarn 安装nightmare时遇到了这个问题 - 噩梦取决于electron@^1.4.4 ,它解析为1.6.0 ,它位于 npm 上的beta dist-tag 下。 最高的最新版本是1.4.15 。 我在不知不觉中针对电子的 beta 版本编写了代码,现在需要将其降级以在生产环境中运行。

我的解决方法是显式声明的版本electron ,我在想package.json分开。

所有3条评论

我遇到了同样的事情。 这似乎在NpmResolve#findVersionInRegistryResponse出错,其中range永远不是传递依赖项的dist-tags的键,而只是一个 semver 范围,然后config.resolveConstraint只是返回最高的一个。
(灾难性的一个很好的例子是 lerna 可怕的金丝雀发布机制,它产生以短 git commit hash 结尾的 semver 预发布版本。我猜真正的程序员总是向下计数,并从 'f' 开始。)

我的 typscript 包也有这个问题。

运行npm view typescript 'dist-tags'
给出这个输出:

{ latest: '2.0.10',
  next: '2.2.0-dev.20161129',
  beta: '2.0.0',
  rc: '2.1.1',
  insiders: '2.0.6-insiders.20161017' }

运行npm install安装 2.0.10 版本
运行纱线后,我在 yarn.lock 中有这个条目

typescript@^2.0.9:
  version "2.1.1"
  resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.1.1.tgz#41c2b64472f529331b2055c0424862b44ce58d42"

你可以争论谁做错了。 我认为纱线跟随 semver 并寻找最新的有效版本,在我的情况下是 2.1.1。

Npm 似乎使用来自 dist-tags 的信息,而 typescript 应该使用版本“2.1.1-rc”。

在通过 yarn 安装nightmare时遇到了这个问题 - 噩梦取决于electron@^1.4.4 ,它解析为1.6.0 ,它位于 npm 上的beta dist-tag 下。 最高的最新版本是1.4.15 。 我在不知不觉中针对电子的 beta 版本编写了代码,现在需要将其降级以在生产环境中运行。

我的解决方法是显式声明的版本electron ,我在想package.json分开。

此页面是否有帮助?
0 / 5 - 0 等级