提示:本网站现在为维护调试状态

Monorepo 工具链:Turborepo + pnpm workspace

Choyeon
Choyeon
2026年9月19日 1 分钟阅读 431 阅读
472 字 1,598 字符 更新于 2026年11月8日
Monorepo 工具链:Turborepo + pnpm workspace
目录

当项目从一个包拆为多个包,每个独立 repo 会导致依赖版本不一致、代码复用难、发布链路繁琐。Monorepo 用工具链解决这些痛点,Turborepo + pnpm 是目前体验最优组合。

pnpm workspace 依赖管理

在 pnpm-workspace.yaml 中声明 apps/* 和 packages/* 目录结构,根目录 pnpm install 自动硬链接,同一依赖跨包共享,node_modules 严格隔离避免幽灵依赖。workspace: 协议引用内部包,修改即时生效无需发版。

# pnpm-workspace.yaml
packages:
  - 'apps/*'
  - 'packages/*'
  - 'tooling/*'

# turbo.json
{
  "$schema": "https://turbo.build/schema.json",
  "pipeline": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": [".next/**", "dist/**"],
      "cache": true
    },
    "typecheck": { "dependsOn": ["^build"], "outputs": [] },
    "lint": { "dependsOn": ["^build"], "outputs": [] },
    "test": {
      "dependsOn": ["^build"],
      "outputs": ["coverage/**"],
      "inputs": ["**/*.test.*", "jest.config.*"]
    },
    "dev": { "cache": false, "persistent": true }
  }
}

# root package.json
{
  "name": "my-monorepo",
  "private": true,
  "packageManager": "pnpm@9.0.0",
  "scripts": {
    "build": "turbo build",
    "typecheck": "turbo typecheck",
    "test": "turbo test",
    "dev": "turbo dev",
    "release": "changeset version && changeset publish"
  },
  "devDependencies": {
    "turbo": "^2.0.0",
    "@changesets/cli": "^2.27.0",
    "typescript": "^5.4.0"
  }
}

# packages/ui/package.json
{
  "name": "@company/ui",
  "version": "1.2.0",
  "type": "module",
  "main": "./dist/index.js",
  "types": "./dist/index.d.ts",
  "exports": {
    ".": { "types": "./dist/index.d.ts", "import": "./dist/index.js" },
    "./styles.css": "./dist/styles.css"
  },
  "sideEffects": false
}

Turborepo 增量构建与缓存

turbo.json 声明任务依赖图:子包 build 依赖上游^build,自动拓扑排序。每次构建的输入哈希命中本地或远程缓存直接跳过,CI 构建速度可提升 5-20 倍。

维度 手工多仓 Lerna + yarn pnpm + Turborepo pnpm + Nx
依赖去重 跨仓各装 中等 hoisting 硬链接共享 与Turborepo相同
任务编排 脚本 弱并行lerna run DAG智能缓存 targetDefaults
远程缓存 无 付费企业版 自建S3/Vercel免费 Nx Cloud免费额度
幽灵依赖风险 低 高 极低 极低

最佳实践

内部包统一 @scope/pkg 命名,Changesets 管理版本与 changelog,禁止跨包相对路径 import。远程缓存配团队 S3 存储,CI 共享加速全员构建。

X微博Telegram

本文作者

投票

你最希望 Rosetta 优先加入哪项功能?

社区投票(演示数据,可后台删除)

评论 (3)

0 / 3000
云端漫步
云端漫步cloud-notes.cloud2026年9月24日

补充一个小技巧:用 kubectl 的 kubectx + kubens 插件切换集群和命名空间超级方便,谁用谁知道。

游戏策划阿哲
游戏策划阿哲2026年9月24日

按照你的教程搭建完 Prometheus + Grafana 监控后,节点 exporter 的数据采集延迟挺高的,这个正常吗?

机器学习萌新
机器学习萌新2026年9月24日

看到你那个 Nginx 配置示例,有个安全问题:server_tokens 建议关掉,不然会暴露 Nginx 版本号给攻击者。

相关文章

CI/CD Pipeline 设计:GitHub Actions + Cache + Matrix Build

CI/CD Pipeline 设计:GitHub Actions + Cache + Matrix Build

从零设计一套工业级 GitHub Actions 流水线:npm/pip 依赖缓存、多版本 Node/Python Matrix 并行构建、Docker 镜像分层缓存、Lint+Test+Build+Publish 分阶段、条件执行、环境矩阵、失败重试和发布门禁最佳实践,附完整工作流代码。

1 分钟阅读
Git 高级工作流

Git 高级工作流

全面掌握 Git 进阶操作:Interactive Rebase 整理提交历史、Cherry-pick 精挑细选移植提交、Bisect 二分查找回归 Bug 源头,配合 reflog 与 reset 拯救误操作。

1 分钟阅读
Docker Compose 生产部署实战

Docker Compose 生产部署实战

本文深入讲解 Docker Compose 在生产环境中的最佳实践,覆盖多阶段构建、健康检查、资源限制、日志配置、网络隔离、密钥管理等核心话题,助你构建稳定可扩展的容器化部署方案。

1 分钟阅读
Tailwind CSS v4 新特性:Zero-config + CSS-native 变量

Tailwind CSS v4 新特性:Zero-config + CSS-native 变量

Tailwind CSS v4 是一次架构级升级:彻底抛弃 tailwind.config.js,用 @theme 块在原生 CSS 文件声明设计令牌;新增 @import "tailwindcss" 单入口代替 postcss.config;内置 CSS 变量、容器查询原生支持、oxc 引擎提速 10-40 倍、颜色函数简化。

1 分钟阅读
PWA 离线应用实战:Service Worker + IndexedDB + Background Sync

PWA 离线应用实战:Service Worker + IndexedDB + Background Sync

逐步构建可安装、可离线运行、网络恢复自动同步的 Progressive Web App:Service Worker 缓存策略(Cache First / Stale-While-Revalidate)、IndexedDB 封装结构化本地数据、Background Sync 后台队列在用户离线操作后网络恢复时自动提交变更,附完整 TS 代码。

1 分钟阅读
GraphQL vs REST:从 7 个维度深度对比

GraphQL vs REST:从 7 个维度深度对比

终结选型焦虑:从网络传输效率、前端开发体验、后端演进成本、缓存策略、类型安全、安全风险、生态工具链 7 大维度系统对比 GraphQL 与 REST,给出清晰决策树与混合架构模式。

1 分钟阅读