您要请求功能还是报告错误?
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
安装并添加到 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)
我遇到了同样的事情。 这似乎在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
分开。
最有用的评论
在通过 yarn 安装
nightmare
时遇到了这个问题 - 噩梦取决于electron@^1.4.4
,它解析为1.6.0
,它位于 npm 上的beta
dist-tag 下。 最高的最新版本是1.4.15
。 我在不知不觉中针对电子的 beta 版本编写了代码,现在需要将其降级以在生产环境中运行。我的解决方法是显式声明的版本
electron
,我在想package.json
分开。