我可以为 lerna monorepo 中的所有子包管理相同的版本吗?
Posted
技术标签:
【中文标题】我可以为 lerna monorepo 中的所有子包管理相同的版本吗?【英文标题】:Can I manage same version for all the sub-package in 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 版本。 【参考方案1】:根据 Lerna 文档,如果您想在同一版本下发布所有包,您需要使用零 (0) 作为 lenra.json 文件中的主要 Lerna 版本。
注意:如果您的主要版本为零,则所有更新都被视为中断。因此,使用主版本零运行 lerna publish 并选择任何非预发布版本号将导致为所有包发布新版本,即使自上次发布以来并非所有包都已更改。
这是 Babel 当前使用的模式。如果您想自动将所有包版本绑定在一起,请使用此选项。这种方法的一个问题是,任何软件包的重大更改都会导致所有软件包都有新的主要版本。
示例:“0”或“0.1.0”
"packages": [
"packages/*"
],
"useWorkspaces": true,
"npmClient": "yarn",
"version": "0"
【讨论】:
【参考方案2】:这正是 Lerna 对 Fixed/Locked mode 所做的,这是 Lerna 项目的默认设置。
固定模式 Lerna 项目在单个版本行上运行。版本保存在项目根目录下的
lerna.json
文件中,版本键下。当您运行lerna publish
时,如果模块自上次发布以来已更新,它将更新为您发布的新版本。这意味着您只在需要时发布新版本的包。
【讨论】:
我不这么认为babel 使用的方式与我解释的相同。你看过angular repo 吗?它是如何使用的? 这只会更新已修改的包。我认为 OP 希望始终以相同的版本发布所有包。【参考方案3】:您可以使用--force-publish
来确保您的所有软件包都在同一版本下发布。
【讨论】:
以上是关于我可以为 lerna monorepo 中的所有子包管理相同的版本吗?的主要内容,如果未能解决你的问题,请参考以下文章
通过 git URL 从 lerna 管理的 monorepo 安装包
nx 和 Lerna 和有啥不一样? (monorepos)