在使用 changeset 时,如何在更新底部依赖时,触发上层依赖更新

摘要:

使用 changeset 的 updateInternalDependents 配置,让 monorepo 架构下相互依赖的 node 包实现基于底层依赖包触发上层依赖包共同升级的效果。

changeset 发版版本号有明显差异

在发版方案使用 changeset 时,我注意到在 monorepo 架构的 node 项目内,发版号并不是随着底层依赖升级而升级的。这引出一个问题?

是否要在底层依赖更新时,使得同一个 monorepo 内的上层依赖也一起更新版本号呢?

我举以下例子说明存在两种版本号处理策略差异。

依赖情况

在我的 monorepo 内输入命令: pnpm why @ruan-cat/utils ,检查在 monorepo 内,指定依赖的包依赖情况:

log 复制代码
Legend: production dependency, optional only, dev only

@ruan-cat-monorepo/root@1.0.0 D:\code\github-desktop-store\gh.ruancat.monorepo (PRIVATE)

devDependencies:
@ruan-cat/commitlint-config link:configs-package/commitlint-config
└── @ruan-cat/utils link:packages/utils
@ruan-cat/generate-code-workspace link:packages/generate-code-workspace
└── @ruan-cat/utils link:packages/utils
@ruan-cat/release-toolkit link:packages/release-toolkit
└─┬ @ruan-cat/commitlint-config link:configs-package/commitlint-config
  └── @ruan-cat/utils link:packages/utils
@ruan-cat/utils link:packages/utils
@ruan-cat/vercel-deploy-tool link:packages/vercel-deploy-tool
└── @ruan-cat/utils link:packages/utils
@ruan-cat/vitepress-preset-config link:packages/vitepress-preset-config
└── @ruan-cat/utils link:packages/utils
@ruan-cat/vuepress-preset-config link:packages/vuepress-preset-config
└── @ruan-cat/utils link:packages/utils

如图所示:

我们可以知道依赖包 @ruan-cat/utils 在该项目内是一个底层包,那么如果对这个底层包做版本号升级,其他的几款依赖是否能够更新版本号呢?

不同的版本号升级情况

该项目目前采用的是基于 changesets/action github 工作流的发版流程,会产生一个 pr。我们阅读以下这个 pr 信息和截图:

  1. 单一包升级情况:

如图,只有一个底层包 @ruan-cat/utils 的版本号升级了,且产生了唯一一个包的更新日志。

  1. 多个包升级情况:

如图,全部依赖 @ruan-cat/utils 的包,他们的版本号也一起升级了,且各自产生了更新日志,说明本包升级版本号是因为所依赖的底层包升级了。

我们可以注意到,在同一个 pr 内,版本号的更新策略是完全不同的。是什么配置导致这种差异呢?怎么去控制在 changeset 内是否要同时更新上层依赖包呢?

具体做法

在 changeset 配置文件 .changeset\config.json 内, 配置 updateInternalDependents 和 onlyUpdatePeerDependentsWhenOutOfRange 即可。

值得注意的是,这个配置现在是普遍关闭的,因为大家很不喜欢这种发版版本号变更策略,因为版本号变更过于频繁,而且语义化不强。

除非需要做到那种强制通知的效果,才需要这种配置。

核心配置如下:

json 复制代码
{
	"$schema": "https://unpkg.com/@changesets/config@3.1.1/schema.json",
	"updateInternalDependencies": "patch",
	"___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": {
		"onlyUpdatePeerDependentsWhenOutOfRange": true,
		"updateInternalDependents": "always"
	}
}

不推荐大家去做这个配置

这种版本号更新策略并不受大家欢迎,因为版本号更新时其核心内容没有很强的语义化。除非你认为底层依赖更新对上层依赖影响很大,有必要通知到使用方时。该发版策略才适合你。否则还是别用这个配置了,噪音太大。

相关推荐
Setsuna_F_Seiei5 小时前
前端转型 Agent 开发 06 之 Agent Memory 记忆系统(让 Agent 更智能,更懂你)
前端·agent·ai编程
zhangzeyuaaa6 小时前
Ruby 多线程、GVL(GIL)与 Mutex 完全指南
开发语言·前端·ruby
默_笙6 小时前
🌊 向量库和 ES 都查不出"关系",我只好给奶茶建了一张人脉网
前端·javascript
优选资讯6 小时前
标签打印软件怎么对接 Excel 数据
前端·excel
一个风轻云淡7 小时前
GCC 和 GDB命令简单解读
java·linux·前端
u0111026758 小时前
图片处理接口如何统一错误信息 前端提示与后端错误码设计
前端·状态模式
福兮说9 小时前
浏览器里把 iPhone 的 HEIC 转成 JPG:Chrome 解不开、转完大了七成、拍摄时间全丢,六个坑实测
前端·javascript·图像处理·chrome·ios·iphone·heic
libokaifa9 小时前
把语音模型塞进手机:sherpa-onnx 在 Android 上的 ASR / TTS
前端
deli0079 小时前
DLA 枝晶生长实测:5000 个粒子集体停摆之后,分形维数收敛到 1.70
前端
m4Rk_9 小时前
【论文阅读】Agent 记忆机制(94):MemGen——在推理过程中动态生成并织入潜在记忆
论文阅读·人工智能·学习·开源·github