# sync-local-versions 版本同步
自动同步 workspace 内定制包的版本引用,并维护 resolutions 字段。
# 触发方式
# 方式一:自动触发(推荐)
yarn install
# preinstall 钩子会自动执行 sync-local-versions
# 方式二:手动执行
npx sync-local-versions
1
2
3
4
5
6
2
3
4
5
6
# 工作流程
执行后,脚本按以下顺序工作:
1. 扫描 packages/ 下所有本地包
└── 收集 name → version 映射表
2. 读取 resolutions 中已记录的定制包版本
└── 如果 resolutions 版本 > 本地包版本 → 更新本地 package.json
3. 通过 customization.identifier 识别定制包
└── 版本号包含标识符的包被标记为定制包
4. 遍历所有 package.json 的 dependencies / devDependencies
└── 对本地包的引用版本对齐为本地实际版本
5. 自动维护根目录 resolutions 字段
├── 定制包 → 加入 resolutions
└── 已恢复标品的包 → 从 resolutions 移除
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 实际效果
假设你的项目中 packages/cloudpivot-form/package.json 的版本是 1.1.2-ai-platform-bankcomm-2.5,而根目录 resolutions 中记录的是 1.1.2-ai-platform-bankcomm-2.4:
执行前:
// 根目录 package.json
{
"resolutions": {
"cloudpivot-form": "1.1.2-ai-platform-bankcomm-2.4"
}
}
// packages/portal/package.json
{
"dependencies": {
"cloudpivot-form": "1.1.2-ai-platform-bankcomm-2.4"
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
执行后:
// 根目录 package.json — resolutions 更新
{
"resolutions": {
"cloudpivot-form": "1.1.2-ai-platform-bankcomm-2.5"
}
}
// packages/portal/package.json — 依赖版本对齐
{
"dependencies": {
"cloudpivot-form": "1.1.2-ai-platform-bankcomm-2.5"
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 常见场景
# 场景一:拉取最新代码后安装
git pull origin main
yarn install # 自动同步版本
1
2
2
# 场景二:同事新增了一个定制包
同事将 cloudpivot-admin-core 改为定制版本并提交。你拉取代码后执行 yarn install,脚本会自动将新包加入 resolutions,所有引用该包的地方版本对齐。
# 场景三:某个定制包恢复为标品
如果定制包的版本号不再包含标识符(如从 1.1.2-ai-platform-bankcomm-2.5 改回 1.1.2),脚本会自动将其从 resolutions 中移除。