同步包版本组管理Skill syncpack-version-groups

这个技能用于在 monorepo 中通过 syncpack 工具管理依赖版本,通过定义版本组来实施高级版本策略,如版本锁定、依赖禁止和忽略检查,以提高项目的依赖一致性和维护效率。关键词包括:monorepo、依赖管理、版本控制、syncpack、版本策略、DevOps、开发工具。

DevOps 0 次安装 0 次浏览 更新于 3/25/2026

名称: syncpack-version-groups 用户可调用: false 描述: 用于在 syncpack 中定义版本策略、禁止依赖、锁定版本或创建分区版本组。涵盖高级版本管理模式。 允许的工具:

  • 读取
  • 写入
  • 编辑
  • Bash
  • Grep
  • Glob

Syncpack 版本组

版本组允许您在 monorepo 中定义复杂的依赖版本策略。本技能涵盖高级版本管理模式。

版本组结构

export default {
  versionGroups: [
    {
      label: '描述此组',
      dependencies: ['包名称', '@作用域/**'],
      dependencyTypes: ['生产', '开发'],
      packages: ['应用/**'],
      specifierTypes: ['精确', '范围'],
      // 策略选项(选择一个)
      preferVersion: '最高语义版本',
      // pinVersion: '1.0.0',
      // isBanned: true,
      // isIgnored: true,
    },
  ],
};

过滤选项

dependencies

通过名称或通配符匹配特定包:

dependencies: [
  'react',           // 精确匹配
  'react-*',         // 通配符
  '@types/**',       // 作用域包
  '{react,vue}',     // 或逻辑
]

dependencyTypes

按依赖出现位置过滤:

dependencyTypes: [
  'dev',           // devDependencies
  'local',         // workspace: 协议
  'overrides',     // npm 覆盖
  'peer',          // peerDependencies
  'pnpmOverrides', // pnpm.overrides
  'prod',          // dependencies
  'resolutions',   // yarn 决议
]

packages

按 package.json 文件过滤:

packages: [
  'apps/**',      // 所有应用
  'packages/core', // 特定包
  '!packages/legacy', // 排除模式
]

specifierTypes

按版本说明符格式过滤:

specifierTypes: [
  'exact',        // 1.2.3
  'range',        // ^1.2.3, ~1.0.0, >=2.0.0
  'tag',          // latest, next, canary
  'url',          // https://, git://
  'file',         // file:../路径
  'workspace',    // workspace:*
]

版本策略

preferVersion

选择当版本不匹配时获胜的版本:

// 使用找到的最高语义版本
preferVersion: 'highestSemver'

// 使用找到的最低语义版本
preferVersion: 'lowestSemver'

// 使用特定包拥有的版本
preferVersion: 'packages/core'

// 使用本地工作区版本
preferVersion: 'local'

pinVersion

强制所有匹配项使用特定版本:

{
  label: '将 TypeScript 锁定到 LTS',
  dependencies: ['typescript'],
  pinVersion: '5.3.3',
}

isBanned

阻止使用某些包:

{
  label: '禁止已弃用的包',
  dependencies: ['moment', 'request'],
  isBanned: true,
}

isIgnored

从版本检查中排除:

{
  label: '忽略本地包',
  dependencyTypes: ['local'],
  isIgnored: true,
}

常见模式

单版本策略的 Monorepo

export default {
  versionGroups: [
    {
      label: '忽略本地工作区包',
      dependencyTypes: ['local'],
      isIgnored: true,
    },
    {
      label: '为其他所有项使用最高版本',
      preferVersion: 'highestSemver',
    },
  ],
};

框架锁定

export default {
  versionGroups: [
    {
      label: '在所有包中锁定 React 版本',
      dependencies: ['react', 'react-dom', '@types/react', '@types/react-dom'],
      pinVersion: '18.2.0',
    },
  ],
};

应用与库的不同规则

export default {
  versionGroups: [
    {
      label: '应用可以有任意版本',
      packages: ['apps/**'],
      isIgnored: true,
    },
    {
      label: '库必须具有一致的版本',
      packages: ['packages/**'],
      preferVersion: 'highestSemver',
    },
  ],
};

禁止安全漏洞

export default {
  versionGroups: [
    {
      label: '禁止已知漏洞的包',
      dependencies: [
        'lodash', // 使用 lodash-es 替代
        'moment', // 使用 date-fns 替代
        'request', // 使用 axios/fetch 替代
      ],
      isBanned: true,
    },
  ],
};

对等依赖的灵活性

export default {
  versionGroups: [
    {
      label: '允许对等依赖的灵活性',
      dependencyTypes: ['peer'],
      isIgnored: true,
    },
    {
      label: '生产/开发依赖的严格版本',
      dependencyTypes: ['prod', 'dev'],
      preferVersion: 'highestSemver',
    },
  ],
};

作用域包的所有权

export default {
  versionGroups: [
    {
      label: '核心团队拥有 @myorg/core',
      dependencies: ['@myorg/core'],
      preferVersion: 'packages/core',
    },
    {
      label: 'UI 团队拥有 @myorg/ui-*',
      dependencies: ['@myorg/ui-*'],
      preferVersion: 'packages/ui',
    },
  ],
};

CLI 命令用于版本组

# 列出所有版本不匹配
npx syncpack list-mismatches

# 修复版本不匹配
npx syncpack fix

# 仅修复特定依赖
npx syncpack fix --dependencies react

# 仅修复特定依赖类型
npx syncpack fix --dependency-types prod,peer

调试版本组

使用标签和详细输出运行:

npx syncpack list-mismatches --log-levels warn,error

顺序重要

版本组按顺序评估。第一个匹配的组获胜:

export default {
  versionGroups: [
    // 特定规则优先
    { dependencies: ['react'], pinVersion: '18.2.0' },
    // 通用规则其次
    { preferVersion: 'highestSemver' },
  ],
};