为什么运行 `yarn update` 不会更新我的 `package.json` 为什么运行 `yarn update` 不会更新我的 package.json

2025-06-10

为什么运行 `yarn update` 不会更新我的 `package.json`

为什么运行yarn upgrade不会更新我的package.json

为什么运行yarn upgrade不会更新我的package.json

今天我想升级我的一个项目的 React 依赖项。所以我运行了



yarn upgrade react


Enter fullscreen mode Exit fullscreen mode

看起来每个人都很开心。

然后我检查了我的package.json,没有任何变化。



"react" "^16.5.1",
"react-dom": "^16.5.1",


Enter fullscreen mode Exit fullscreen mode

我在 Google 上的第一个问题是“yarn 升级无法更新 package.json”。一些搜索结果似乎表明 Yarn 早期版本存在 bug。但问题似乎并没有得到解决。

Yarn 的官方文档明确指出,运行这样的命令应该会更新此处的依赖关系。

然后我检查了一下yarn.lock,发现我的升级包的最新版本已经安装了。

为什么,为什么,为什么🤷🏻‍♀️

我粗略地了解了这里可能发生的情况。当前版本react@^16.5.1接受升级后的版本16.8.6,如所示yarn.lock

但是,在这种语义情况下,我应该如何正确升级依赖项呢?也就是说,将依赖项升级到最新版本,并表明我的应用现在依赖于该版本?

我的意思是,除了手动更改之外package.json

我尝试了一些方法。有些方法显然方向不对,但它们确实有助于我更好地理解情况。

了解语义版本控制范围

我们中安装的版本node_modules可能不是我们在 中看到的文字数字package.json。这是因为我们指示的版本可能是一个范围。

例如,插入符号范围指定如下:

允许不修改版本中第一个非零数字的更改,无论是 3.1.4 中的 3 还是 0.4.2 中的 4。

通过运行添加包时,默认使用插入符号范围



$ yarn add package-name


Enter fullscreen mode Exit fullscreen mode

这将安装具有最新稳定版本的软件包,并且 Yarnpackage.json使用插入符号范围写入该版本。

如果我理解正确的话,似乎如果我yarn将来运行我的包,或者其他包依赖于更高版本,只要它满足范围,它就会使用更高版本。

语义版本控制有更多范围:

您可以在此处阅读 Yarn 的文档,或在此处阅读 NPM 的文档

理解命令yarn upgrade

所以我今天学到的是,跑步yarn upgrade并不一定会package.json像我想象的那样更新。

yarn upgrade(不带修饰语)

没有任何修饰符的运行yarn upgrade不会更新package.json

如果我们在运行时不带任何标志,它将安装与 指示的版本模式匹配的yarn upgrade最新版本。并且它不会更新 package.jsonpackage.json

  • yarn upgrade依赖关系:tilde 范围"react": "~16.5.1"安装最新版本~16.5.116.5.2
  • yarn upgrade依赖关系:在插入符号范围内安装截至今天的"react": "^16.5.1"最新版本~16.5.116.8.6
  • yarn upgrade完全依赖"react": "16.5.1"根本不安装任何新东西🧐

yarn upgrade --latest

当最新的稳定版本不再符合当前范围时,运行yarn upgrade 可能会更新。package.json

但它仍然可能无法更新package.json。具体来说,当最新版本与中指示的语义版本范围匹配时package.json

  • yarn upgrade --latest依赖:安装今天的"react": "~16.5.1"最新版本,并更新16.8.6package.json"react": ~16.8.6"
  • yarn upgrade --latest依赖:安装今天的"react": "^16.5.1"最新版本,并更新16.8.6package.json"react": ^16.8.6"
  • yarn upgrade --latest根据确切的依赖关系安装截至今天的"react": "16.5.1"最新版本,并更新16.8.6package.json"react": 16.8.6"

如果我想升级到某个版本并更新,该怎么办package.json

如果要处理一个连小版本都敏感的库,最好指定一个更严格的版本范围,甚至是精确的版本范围。然后使用 进行升级--latest

除此之外,在尝试了几个命令之后,我发现这个命令很有趣,并且在这种情况下最直接:



$ yarn upgrade react@^


Enter fullscreen mode Exit fullscreen mode

这将弹出一个交互式的版本列表供您选择。安装完成后,它会package.json再次更新到所选版本,并以插入符号范围显示。

总结

对于版本敏感的库(例如 Flow??? 🙈),请指示版本依赖性,但不带任何范围。

使用yarn upgrade package@[version]也许是升级软件包的实际操作最直观的方式。

参考

鏂囩珷鏉ユ簮锛�https://dev.to/wgao19/why-running-yarn-upgrade-does-not-update-my-package-json-3mon
PREV
✔ WhatsApp Group API:开发人员指南
NEXT
夜间模式🌚🌝与混合模式的区别