使用纱线工作区时如何在所有包中加入版本?

sid*_*shi 9 node.js monorepo yarnpkg

使用时Yarn Workspaces,我们有一个项目结构,如:

- package.json
- packages/
    - package-a/
        - package.json
        - index.js
    - package-b/
        - package.json
        - index.js
Run Code Online (Sandbox Code Playgroud)

如果package-b此目录中的许多其他软件包依赖于package-a我,并且package-a在进行一些更改后升级了版本,如何升级package-a所有相关软件包中的版本?我必须手动完成还是有更好的方法?

San*_*nQu 5

据我所知,目前不可能用纱线本身来管理这个问题。您可以使用lerna项目https://github.com/lerna/lerna/tree/master/commands/version#readme,它支持更改工作区的版本

手册(不带lerna)

对于我现有的项目,我是手动完成的。

注意:此命令将所有工作区设置为同一版本

添加postversion到根目录 ./package.json 的脚本块中

{
  "version": "1.0.0",
  ...
  "scripts": {
    "version:package-a": "cd packages/package-a && yarn version --new-version $npm_package_version",
    "version:package-b": "cd packages/package-b && yarn version --new-version $npm_package_version",
    "postversion": "yarn version:package-a && yarn version:package-b"
  }
}
Run Code Online (Sandbox Code Playgroud)
  • 现在你可以运行:yarn version --patch
  • 这会将所有工作区(package-a 和 package-b)的版本提升到相同版本 1.0.1

更新2022-04-08

解决方案 1:现在使用该yarn workspace ...命令更简单地更新所有版本。主要package.json你必须输入以下内容:

{
  "version": "1.0.0",
  ...
  "scripts": {
    "version": "yarn workspace package-a version --new-version $npm_package_version && yarn workspace package-b version --new-version $npm_package_version"
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您现在执行,所有工作区版本都会与从主文件的yarn version指定版本继承的版本相同package.json

解决方案 2:yarn 有一个解决方案。但仍处于实验模式。https://yarnpkg.com/features/release-workflow


小智 0

我相信另一个答案已经过时了;现在,有了纱线工作区,您可以使用它yarn up <library-name>来增强所有工作区中的依赖性。