我如何才能对所有依赖项进行版本调整?

How can I version bump all my dependencies?

yarn outdated 提供了很多信息,但我想避免 运行 一个接一个地做 yarn upgrade

根据 yarn 的文档,据说 yarn upgrade 不带参数可以升级所有依赖项,但我项目的 package.jsonyarn outdated 显示的包版本与以前相同。

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

如果不是,是否在某种程度上不鼓励这种做法?

您可以使用 yarn upgrade 不带任何参数将您的软件包更新到 package.json 中指定的最新版本。

这取自 docs:

yarn upgrade

This command updates all dependencies to their latest version based on the version range specified in the package.json file. The yarn.lock file will be recreated as well.

这只会更新允许在 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

如果您的依赖项使用范围版本("^x.x.x""~x.x.x" 等),如果最新版本也匹配该范围,您的 package.json 将不会更新,仅你的 yarn.lock.

如果您希望更新您的 package.json

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

现在您的 yarn.lockpackage.json 都将准确反映最新版本。

只需 运行 yarn upgrade-interactive --latest 和 select 个您要使用 space 按钮更新的软件包,然后按回车键进行更新。

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

yarn upgrade --latest

Yarn v2 及更高版本用户的答案。

导入 interactive-tools 插件:

$ yarn plugin import interactive-tools

而运行是这样的:

$ yarn upgrade-interactive

请注意,这也会修改您 package.json 中的语义版本。

我总是遵循它的官方文档:)

yarn add --dev yarn-upgrade-all

来源:https://yarnpkg.com/package/yarn-upgrade-all

您还可以将依赖项复制到打字稿或 javascript playground 并使用 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 add @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-media-queries gulp-rename gulp-rev-all gulp-sass gulp-uglify jshint node-promise react react-dom require-dir run-sequence source-map-loader typescript webpack webpack-cli webpack-log

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

https://www.typescriptlang.org/play?ssl=35&ssc=19&pln=1&pc=1#code/DYUwLgBA9gRgVhAvBA3gKApiAiAAmATwAcQBnAegCcQBDAYzGwC4cA9ARgDYA6AZm-YAObABoMWPIRIVq9MAFoAJlAC2zNl24AGbp1HjM2GgHcyqkPKlk6lAJZEFwKDUUhK67KwCsA7fqw4MDQwIMDyRFDABABmtsDAHqw8AEw8Wv4Srgks2MnceckZhmTydFBQANa2IIns+X5iAdhknOGUqrakNTkALL7sRTgA5gCuwESJfTqFjRKj4-I0I2BQRNSxAB5uifx1A7OG80SloDQAdqWkpDva+YPYR6VQZ3Q0jDmseTz7BsNjx7Zook8tN7o84KQABa2M7vNgg7g9MH-eQqNxDCxoxS2GjyACOIzc1WuOWmAmRC2oZxoaNq9RmvweKOoADdFvFEjoAJzcADsFOOpBoVxudXSBz+CxGQ2AgIIwNuPyaEOhsIVPKREuwZygrjaHS6nO4PnYDKasgYtR4fSVEgtCmUag+mht92oBNs1CUnqN-DNdpGFy6BJAL26ODqBXupCgI0odExNGOThc2w+ZN49yspBs9jhnjyPP9hlMMCI9AqkwEIPupfLdAqJ1sNx0wi1dYr8icQzpNfEAF80OJQJBqKQkBAAPLwEAMbihsB2MgAClgcAAlNxqIoRgnl8uNqQRBANuukAA+CAAAwAJChD-2IHeNgBtLQAXQg-avx+wBBolBnBALiKNg65DpgZRnDGoDcN2y5juuQA