# sync-local-versions 版本同步

自动同步 workspace 内定制包的版本引用,并维护 resolutions 字段。

# 触发方式

# 方式一:自动触发(推荐)
yarn install
# preinstall 钩子会自动执行 sync-local-versions

# 方式二:手动执行
npx sync-local-versions
1
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

# 实际效果

假设你的项目中 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

执行后:

// 根目录 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

# 常见场景

# 场景一:拉取最新代码后安装

git pull origin main
yarn install   # 自动同步版本
1
2

# 场景二:同事新增了一个定制包

同事将 cloudpivot-admin-core 改为定制版本并提交。你拉取代码后执行 yarn install,脚本会自动将新包加入 resolutions,所有引用该包的地方版本对齐。

# 场景三:某个定制包恢复为标品

如果定制包的版本号不再包含标识符(如从 1.1.2-ai-platform-bankcomm-2.5 改回 1.1.2),脚本会自动将其从 resolutions 中移除。