yarn 安装了 2 个版本的 jquery。为啥,除了直接编辑 yarn.lock 之外,我该如何修复它?
Posted
技术标签:
【中文标题】yarn 安装了 2 个版本的 jquery。为啥,除了直接编辑 yarn.lock 之外,我该如何修复它?【英文标题】:yarn installed 2 versions of jquery. Why, and how can I fix it except directly editing yarn.lock?yarn 安装了 2 个版本的 jquery。为什么,除了直接编辑 yarn.lock 之外,我该如何修复它? 【发布时间】:2018-08-03 16:19:01 【问题描述】:yarn add foo
yarn add jquery-form
yarn add jquery@2.2.4
foo
声明依赖 "jquery@>=2.2.0 <3.0.0"
,jquery-form
声明 jquery@>=1.7.2
在我看来我应该有jquery@2.2.4
,但这是我的yarn.lock
jquery@2.2.4, "jquery@>=2.2.0 <3.0.0":
version "2.2.4"
resolved "..."
jquery@>=1.11.1, jquery@>=1.7.2:
version "3.3.1"
resolved ".."
所以,在生产中jquery-form
得到了3.3.1
,而foo
得到了2.2.4
。
我现在有 2 个不同的 jquery,这不好:)
我用
修复了它jquery@2.2.4, jquery@>=1.11.1, jquery@>=1.7.2, "jquery@>=2.2.0 <3.0.0":
version "2.2.4"
resolved "..."
现在2.2.4
上的所有内容都已更新。但我yarn.lock
不是你应该手动编辑的东西。
我该如何解决?
【问题讨论】:
【参考方案1】:TL;TR: "resolutions": "jquery": "2.2.4"
in package.json
原始npm
(3.0 之前)用于以树模式(某种并排)安装所有依赖项。在过去,如果模块 A
依赖于 jquery-1
并且模块 B
依赖于 jquery-2
npm
做了以下操作
node_modules/A/node_modules/jquery-1
node_modules/B/node_modules/jquery-2
这对服务器来说可以,但对客户端来说不行。所以他们使用了bower
,它产生了flat依赖:每个库只有一个版本。解决所有冲突是开发人员的职责。
现在 bower
已被弃用,npm
(3+) 和 yarn
都可以在平面模式 id 中解决依赖关系,但如果 yarn
不能这样做 - 你有两个版本的 @987654335再次@。
可以强制纱线使用扁平模式:yarn --flat
。它会询问你每一个冲突:
info Unable to find a suitable version for "jquery", please choose one by typing one of the numbers below:
1) "jquery@2.2.4, jquery@>=2.2.0" which resolved to "2.2.4"
2) "jquery@>=1.7.2, jquery@>=1.11.1, jquery@>=1.7.2" which resolved to "3.3.1"
我不知道为什么不能解析到2.2.4
(我们应该问semver
作者我相信)),但是点击这里2
和yarn
会将你的选择保存到package.json
(不是yarn.lock
!)。
"author": "Foo",
"license": "UNLICENSED",
"resolutions":
"jquery": "2.2.4"
问题解决了。对于所有客户端代码,最好使用yarn --flat
。
【讨论】:
以上是关于yarn 安装了 2 个版本的 jquery。为啥,除了直接编辑 yarn.lock 之外,我该如何修复它?的主要内容,如果未能解决你的问题,请参考以下文章