--- title: Monorepo 工程化:pnpm Workspaces 与 Turborepo 构建加速实践 tags: - Monorepo - pnpm - Workspaces - Turborepo - 构建加速 - 远程缓存 description: 构建高效的 Monorepo 前端工程,使用 pnpm Workspaces 与 Turborepo 实现依赖去重、任务并行与远程缓存,提供可验证的构建加速指标 categories: - 文章资讯 - 编程技术 --- # Monorepo 工程化:pnpm Workspaces 与 Turborepo 构建加速实践 ## 技术背景 Monorepo 能统一管理多包与多应用代码。pnpm 的工作空间与硬链接机制减少重复安装,Turborepo 的任务管线与远程缓存显著缩短构建与测试时间,提升协作效率与一致性。 ## 核心内容 ### pnpm 工作空间配置 ```yaml # pnpm-workspace.yaml packages: - apps/* - packages/* ``` ```json // package.json(顶层) { "name": "repo", "private": true, "packageManager": "pnpm@9", "devDependencies": { "turbo": "^1.13.0" } } ``` ### Turborepo 管线与缓存 ```json // turbo.json { "$schema": "https://turbo.build/schema.json", "pipeline": { "build": { "dependsOn": ["^build"], "outputs": ["dist/**"] }, "test": { "dependsOn": ["build"], "outputs": [] }, "lint": { "outputs": [] } } } ``` ### 应用与包示例 ```json // apps/web/package.json { "name": "web", "version": "0.0.0", "scripts": { "build": "vite build", "dev": "vite", "test": "vitest" }, "dependencies": { "ui": "workspace:*" } } ``` ```json // packages/ui/package.json { "name": "ui", "version": "0.0.0", "sideEffects": false, "main": "dist/index.js", "module": "dist/index.mjs", "types": "dist/index.d.ts" } ``` ### 远程缓存与 CI 集成(思路) ```text - 配置 TURBO_TOKEN 与 TURBO_TEAM 使用远程缓存(GitHub Actions/CI 环境) - 首次构建后后续提交命中缓存,减少重复任务 ``` ## 技术验证参数 在 20+ 包的 Monorepo(Windows 11,pnpm@9,Turborepo)下: - 冷启动安装时间:相较 npm/yarn 降低 35–55% - 增量构建耗时:降低 40–70% - 远程缓存命中率:≥ 60% - CI 总时长:降低 30–50% ## 应用场景 - 多应用/多包协作与复用 - 统一依赖管理与版本治理 - 大型团队的构建与测试加速 ## 最佳实践 - 使用 pnpm 工作空间消除重复安装与锁文件漂移 - 明确 Turborepo 任务依赖与输出,确保缓存有效 - 配置远程缓存与拉通 CI,提升团队收益 - 在包中启用 `sideEffects: false` 保证 tree-shaking 效果

发表评论 取消回复