【问题标题】:Can I manage same version for all the sub-package in lerna monorepo?我可以为 lerna monorepo 中的所有子包管理相同的版本吗?
【发布时间】:2019-09-20 07:25:19
【问题描述】:
my-lerna-repo/
package.json
packages/
    package-1/
        package.json
    package-2/
        package.json
            dependencies: {
                package-1
            }

我想为所有子包保持一致的版本。另外,我们在子包中有交叉依赖。

我想实现类似于 angular 的效果。

https://github.com/angular/angular

他们只在根级别管理包版本,并在他们提到的所有子包中管理 0.0.0-PLACEHOLDER。构建时它从根包中选择版本。

如果有任何现有的方法可以做到这一点,或者我需要编写自己的自定义脚本,请告诉我。

【问题讨论】:

  • 我没有找到任何解决方案,所以编写了自定义脚本。在创建可部署包时,我们在编译之前运行该脚本。它迭代每个包并从父 package.json 版本替换 0.0.0-PLACEHOLDER 版本。

标签: angular version-control yarnpkg lerna monorepo


【解决方案1】:

根据 Lerna 文档,如果您想在同一版本下发布所有包,您需要使用零 (0) 作为 lenra.json 文件中的主要 Lerna 版本。

注意:如果您的主要版本为零,则所有更新都被视为中断。因此,使用主版本零运行 lerna publish 并选择任何非预发布版本号将导致为所有包发布新版本,即使自上次发布以来并非所有包都已更改。

这是 Babel 当前使用的模式。如果您想自动将所有包版本绑定在一起,请使用此选项。这种方法的一个问题是,任何软件包的重大更改都会导致所有软件包都有新的主要版本。

示例:“0”或“0.1.0”

{
  "packages": [
    "packages/*"
  ],
  "useWorkspaces": true,
  "npmClient": "yarn",
  "version": "0"
}

【讨论】:

    【解决方案2】:

    这正是 LernaFixed/Locked mode 所做的,这是 Lerna 项目的默认设置。

    固定模式 Lerna 项目在单个版本行上运行。版本保存在项目根目录下的 lerna.json 文件中,版本键下。当您运行lerna publish 时,如果模块自上次发布以来已更新,它将更新为您发布的新版本。这意味着您只在需要时发布新版本的包。

    【讨论】:

    • 我不这么认为babel 使用的方式与我解释的相同。你看过angular repo 吗?它是如何使用的?
    • 这只会更新已修改的包。我认为 OP 希望始终以相同的版本发布所有包。
    【解决方案3】:

    您可以使用--force-publish 来确保您的所有软件包都在同一版本下发布。

    【讨论】:

      猜你喜欢
      • 2018-09-14
      • 2018-08-10
      • 2021-09-04
      • 2020-08-15
      • 2020-10-25
      • 1970-01-01
      • 2022-06-26
      • 2014-03-24
      • 1970-01-01
      相关资源
      最近更新 更多