目标
团队横跨三个 Node 小版本,意味着一个只在两台机器上存在、第三台和 CI 都复现不了的 bug。先普查实际版本分布,据此选定一条受支持线,再用一份提交进仓库的版本清单让 CI、版本管理器与编辑器全部读同一处——环境从此是共享事实。
步骤要点
- 普查野外的版本:收集团队与 CI 的实际本地版本,量化离散度(哪些运行时、多少条小版本线)。
- 审慎选定版本线:基于普查、兼容需求与支持周期为每个工具选一条受支持线,并记录理由。
- 用单一源声明:把选定版本钉进提交的版本清单,CI、版本管理器与编辑器工具链都读它。
- 带窗口与冒烟验收迁移:给团队迁移窗口,冒烟套件作为每台机器切换后可用的验收标准。
- 防止再碎片化:CI 拒绝偏离声明线环境提交,下一次升级排期进行而不是再次漂移。
排错提示
版本散在三处(CI 矩阵、README、Dockerfile)必然打架,收敛为单一清单文件;普查没做就选线会困住走不动的人,先看分布再决策;升级靠各自漂移完成等于回到原点,把升级做成有窗口的排期事件。
适用边界
个别成员的特殊项目需求可短期例外,但例外要在普查中可见且有到期;单一版本源对容器与本地双环境都要生效,缺一处就是侧门。
代码示例
version census (before):
node: 20.9 (2), 20.18 (5), 22.5 (3), 22.11 (6)
pnpm: 8.x (7), 9.x (9)
-> 4 node lines, 2 pnpm lines
chosen line (rationale documented):
node 22.11 LTS, pnpm 9.12
single source (committed .mise.toml):
[tools]
node = "22.11.0"
pnpm = "9.12.3"
CI: reads the same file; off-line runners fail
setup: "node 22.5 detected, expected 22.11.0"
census (after window + smoke): 16/16 on line
next upgrade: scheduled 2027-01 (not drift)