单例库要显式声明同一版本,否则运行时分裂
案例(pnpm monorepo)
apps/ai-workflows显式锁定@opentelemetry/api@1.9.0,Agent 包没有直接声明 → pnpm 自动解到1.9.1→ 整套 OTEL peer graph 被复制,pnpm-lock.yaml多出约 259 行重复依赖。- 修法只有一个:给 Agent 也加上同样的精确版本,再重生成 lockfile。
判据与修法
| 信号 | 含义 |
|---|---|
| lockfile 里同一包出现两个版本、大段重复行 | 依赖图被复制,单例前提已破 |
| 运行时「provider 分裂」类报错(追踪/上下文/状态取不到) | 往往就是两份实例 |
| 只在部分包里声明版本 | 未声明的那份会被解析成「最近版本」 |
原则:需要单例的库,在所有消费方显式声明同一精确版本;不要依赖传递依赖「碰巧一致」。
相关
- 依赖版本要锁主版本而非一律取最新 —— 同一取向的另一半:装的时候怎么定版本
- 项目里的技能可能有多份副本 —— 同属「同一份东西出现多副本」