技能 monorepo-management
📦

monorepo-management

安全

使用 Turborepo 和 pnpm 构建和管理可扩展的单仓库

也可从以下获取: wshobson

跨独立仓库管理多个包会增加复杂性和不一致性。本技能提供经过验证的单仓库设置模式,包括 Turborepo、Nx 和 pnpm 工作区,以实现代码共享和高效构建。

支持: Claude Codex Code(CC)
🥉 74 青铜
1

下载技能 ZIP

2

在 Claude 中上传

前往 设置 → 功能 → 技能 → 上传技能

3

开启并开始使用

测试它

正在使用“monorepo-management”。 设置 Turborepo 单仓库结构

预期结果:

创建了包含 apps/web(Next.js)、apps/docs(Next.js)、packages/ui(React 组件)、packages/config(共享配置)和 packages/tsconfig(TypeScript 配置)的单仓库。配置了 turbo.json,包含 build、test、lint 和 dev 管道。

正在使用“monorepo-management”。 为三个包配置 pnpm 工作区

预期结果:

使用 apps 和 packages 目录设置 pnpm-workspace.yaml。创建了启用 shamefully-hoist 和 auto-install-peers 的 .npmrc。在工作区根目录安装共享依赖,并在需要时添加包级别的覆盖。

正在使用“monorepo-management”。 优化 Turborepo 缓存

预期结果:

在 turbo.json 管道中配置了正确的 dependsOn 链、用于缓存的 outputs 和用于缓存失效的 inputs。使用 Vercel 启用远程缓存。对于未更改的包,构建时间从 12 分钟减少到 3 分钟。

安全审计

安全
v1 • 2/25/2026

This skill contains documentation-only markdown files with instructional code examples. Static analysis flagged 60 patterns (external commands, network URLs, filesystem references, environment variables) but all are false positives - they appear in markdown code blocks as examples, not executable code. No security threats detected after manual review.

2
已扫描文件
660
分析行数
0
发现项
1
审计总数
未发现安全问题
审计者: claude

质量评分

38
架构
100
可维护性
87
内容
50
社区
100
安全
91
规范符合性

你能构建什么

构建多应用平台的初创公司

一家初创公司需要在 Web 应用、移动应用和文档站点之间共享 UI 组件和工具,同时保持一致的工具链。

整合微服务的企业

一家企业希望将相关的微服务整合到单个仓库中,以便更轻松地进行跨服务重构和共享类型定义。

开源库维护者

一位维护者希望将一个大型库拆分为多个专注的包,同时将它们保留在单个仓库中以便更好地协调。

试试这些提示

快速单仓库设置
帮助我使用 Turborepo 和 pnpm 创建一个新的单仓库。我需要两个应用(web 和 docs)以及一个共享的 UI 包。提供初始文件夹结构和关键配置文件。
将现有项目迁移到单仓库
我有三个独立的仓库:一个 Next.js 应用、一个 React 组件库和一个共享工具包。指导我将它们迁移到使用 Turborepo 的单个 pnpm 工作区中。
优化构建性能
我的单仓库构建需要 15 分钟。分析我的 turbo.json 配置,并建议改进缓存、并行化和远程缓存设置以减少构建时间。
设置 CI/CD 管道
为我的 Turborepo 单仓库创建一个 GitHub Actions 工作流,在拉取请求上运行 lint、test 和 build,在合并到 main 时仅部署受影响的应用程序。

最佳实践

  • 在根级别锁定依赖版本,并使用工作区协议处理内部包
  • 精确配置 Turborepo 的 inputs 和 outputs 以最大化缓存命中率,同时确保正确性
  • 使用 changesets 进行多包的协调版本管理和发布

避免

  • 在 package.json 依赖项中未声明就导入包
  • 在单仓库中的包之间创建循环依赖
  • 将缓存 outputs 配置得过于宽泛,导致来自未缓存文件的过时构建

常见问题

我应该为单仓库使用 Turborepo 还是 Nx?
Turborepo 更简单,适用于大多数 JavaScript 单仓库。Nx 提供更多功能,如依赖图、生成器和受影响的项目检测,但学习曲线更陡。除非需要 Nx 特定功能,否则从 Turborepo 开始。
如何在包之间共享 TypeScript 类型?
创建一个专用的类型包(packages/types),导出所有共享接口和类型。其他包使用工作区协议从此包导入。这确保了单仓库中的类型一致性。
我可以在 CI 中仅部署已更改的应用吗?
可以。在 Nx 中使用 affected 命令,或配置 Turborepo 进行正确的分支比较。GitHub Actions 可以检测已更改的包并仅部署受影响的应用程序,从而减少部署时间和成本。
如何处理不同包之间的 Node.js 版本差异?
使用 package.json 中的 engines 字段指定版本要求。配置 CI 以针对最低支持版本进行测试。如有需要,考虑使用 volta 或 nvm 来管理每个包的 Node 版本。
什么是工作区协议,什么时候应该使用它?
工作区协议(workspace:*)在单仓库内链接包,而不是从 npm 获取。对于所有内部包依赖都使用它,以确保在开发和构建过程中始终使用本地版本。
如何从单仓库发布包?
使用 Changesets 管理版本和发布。运行 changeset 创建版本变更文件,然后运行 changeset version 和 changeset publish。这会协调版本更新并仅发布已更改的包。