如何对所有依赖项进行版本升级?

问题描述 投票:0回答:7

拥有

yarn outdated
信息量很大,但我想避免逐个包地运行
yarn upgrade

从yarn的文档中,据说仅不带参数的

yarn upgrade
即可升级所有依赖项,但我的项目的
package.json
yarn outdated
没有变化,并且显示与以前相同的软件包版本。

是否有一些命令或参数会破坏我的所有依赖项?

如果没有,是否会以某种方式阻止这种做法?

javascript dependency-management yarnpkg
7个回答
128
投票

将所有软件包升级到最新版本

yarn upgrade --latest

68
投票

您可以使用

yarn upgrade
将软件包更新到 package.json 中指定的最新版本,无需任何参数。

这取自docs

yarn upgrade

此命令将所有依赖项更新到最新版本 package.json 文件中指定的版本范围。纱线锁 文件也将被重新创建。

这只会更新 package.json 中允许升级的软件包,例如使用

^
(例如,
^0.13.0
将更新到版本
0.14.0
(如果存在))。这不会更新您的 package.json 文件,但会更新yarn.lock。

如果您想将依赖项更新到最新版本,您可以使用包

npm-check-updates
它将更新您的 package.json:

$ yarn global add npm-check-updates
$ npm-check-updates -u
$ yarn upgrade

41
投票

只需运行

yarn upgrade-interactive --latest
并使用空格按钮选择要更新的软件包,然后按 Enter 进行更新。


19
投票

针对 Yarn v2 及以上版本用户的解答。

导入

interactive-tools
插件:

$ yarn plugin import interactive-tools

然后像这样运行:

$ yarn upgrade-interactive

请注意,这也会修改您的

package.json
中的 semvers。


8
投票

如果您的依赖项使用范围版本(

"^x.x.x"
"~x.x.x"
等),则如果最新版本也与该范围匹配,您的
package.json
将不会更新,只有您的
yarn.lock

如果您希望更新您的

package.json

  1. 将所有依赖项更改为固定版本 (
    "x.x.x"
    )
  2. 运行
    yarn
    更新
    yarn.lock
  3. 运行
    yarn upgrade-interactive
    并选择要升级的所有依赖项

现在您的

yarn.lock
package.json
都将反映准确的最新版本。


1
投票

您还可以将依赖项复制到打字稿或 JavaScript 游乐场,并使用

Object.entries(obj).reduce((xs, x) => 
${xs} ${x[0] }
, "yarn add")
生成包含
package.json
中所有包的命令。

示例

let obj = {
    "@types/react": "^16.3.18",
    "@types/react-dom": "^16.0.6",
    "awesome-typescript-loader": "^5.1.0",
    "babel-polyfill": "^6.26.0",
    "del": "2.2.2",
    "es-cookie": "^1.2.0",
    "es6-promise": "4.1.1",
    "gulp": "^4.0.2",
    "gulp-autoprefixer": "^3.1.1",
    "gulp-clean-css": "^3.0.2",
    "gulp-concat": "^2.6.1",
    "gulp-if": "^2.0.2",
    "gulp-jshint": "^2.0.4",
    "gulp-merge-media-queries": "0.2.1",
    "gulp-rename": "^1.2.2",
    "gulp-rev-all": "^0.9.7",
    "gulp-sass": "^3.1.0",
    "gulp-uglify": "^2.0.1",
    "jshint": "^2.9.4",
    "node-promise": "^0.5.12",
    "react": "^16.4.1",
    "react-dom": "^16.4.1",
    "require-dir": "^0.3.2",
    "run-sequence": "1.2.2",
    "source-map-loader": "^0.2.3",
    "typescript": "^2.9.2",
    "webpack": "^4.12.0",
    "webpack-cli": "^3.0.8",
    "webpack-log": "^1.2.0"
  }

  let res = Object.entries(obj).reduce((xs, x) => `${xs} ${x[0] }`, "yarn add")

  console.log(res)

输出:

yarn 添加 @types/react @types/react-dom Awesome-typescript-loader babel-polyfill del es-cookie es6-promise gulp gulp-autoprefixer gulp-clean-css gulp-concat gulp-if gulp-jshint gulp-merge-媒体查询 gulp-rename gulp-rev-all gulp-sass gulp-uglify jshint 节点承诺反应 反应-dom 要求-dir 运行序列 源地图加载器 打字稿 webpack webpack-cli webpack-log

我使用这个游乐场来快速生成命令。从 json 对象快速生成代码也很有用。

https://www.typescriptlang.org/play?ssl=35&ssc=19&pln=1&pc=1#code/DYUwLgBA9gRgVhAvBA3gKApiAiAAmAATwAcQBnAegCcQBDAYzGwC4cA9ARgDYA6AZm-YAObABoMWPIRIVq9MAFoAJlAC2zNl24AGbp1 HjM2GgHcyqkPKlk6lAJZEFwKDUUhK67KwCsA7fqw4MDQwIMDyRFDABABmtsDAHqw8AEw8Wv4Srgks2MnceckZhmTydFBQANa2IIns+X5iAdhknOGUqrakNTkALL7sRTga5gCuwESJfTqFjRKj4-I0I2BQRNSx AB5uifx1A7OG80SloDQAdqWkpDva+YPYR6VQZ3Q0jDmseTz7BsNjx7Zook8tN7o84KQABa2M7vNgg7g9MH-eQqNxDCxoxS2GjyACOIzc1WuOWmAmRC2oZxoaNq9RmvweKOoADdFvFEjoAJzCADsFOOp BoVxudXSBz+CxGQ2AgIIwNuPyaEOhsIVPKREuwZygrjaHS6nO4PnYDKasgYtR4fSVEgtCmUag+mht92oBNs1CUnqN-DNdpGFy6BJAL26ODqBXupCgI0odExNGOThc2w+ZN49yspBs9jhnjyPP9hlMMCI9AqkwEIP upfLDAqJ1sNx0wi1dYr8icQzpNfEAF80OJQJBqKQkBAAPLwEAMbihsB2MgAClgcAAlNxqIoRgnl8uNqQRBANuukAA+CAAAwajChD-2IHeNgBtLQAXQg- avx+wBBolBnBALiKNg65DpgZRnDGoDcN2y5juuQA


0
投票

jq 两线:

 cat package.json | jq   '.dependencies | keys[]' -r | xargs yarn upgrade
 cat package.json | jq   '.devDependencies | keys[]' -r | xargs yarn upgrade

© www.soinside.com 2019 - 2024. All rights reserved.