当前位置: 首页 > article >正文

你的代码仓库变成“毛线团”了?Monorepo 用 Turborepo 拆成“乐高积木”

你维护着五六个项目每个都单独开一个 Git 仓库。改一个公共组件要挨个进每个项目复制粘贴提交发布。一上午就没了。今天我们来学 Monorepo——用 Turborepo 把多个项目放进同一个仓库共享代码、统一构建、一键发布。让你的“多仓库噩梦”变成“搭积木游戏”。前言Polyrepo多仓库刚开始很爽每个项目独立互不干扰。但公共代码一多就成了复制粘贴地狱。你修了一个 bug五个项目都要同步漏一个线上就崩。Monorepo单仓库不是把代码随便堆在一起而是用工具Turborepo、Nx、Lerna把多个项目“有序地”放在同一个 Git 仓库里让它们能共享依赖、共享配置、共享构建缓存。今天我们用TurborepoVercel 出品Next.js 同款团队搭一个 Monorepo里面有 React 应用、Node API、一个共享的 UI 组件库。全程实战告别“复制粘贴工程师”。一、Monorepo 解决了什么代码共享公共组件放在packages/shared所有应用直接import。统一依赖根目录一个package.json用pnpm或yarn workspaces管理依赖避免重复安装。原子提交一次 commit 修改多个项目版本同步。任务缓存Turborepo 会记住每个任务的输入输出第二次构建直接取缓存秒完成。二、准备工作安装 pnpm 和 Turborepo我们选择pnpm作为包管理器比 npm/yarn 快节省磁盘空间。如果你没装 pnpmnpminstall-gpnpm创建项目目录mkdirmy-monorepocdmy-monorepopnpminit三、配置 pnpm workspace在根目录创建pnpm-workspace.yamlpackages:-apps/*-packages/*这样apps/下的每个子目录是一个应用比如 React 前端、Node 后端packages/下的子目录是共享包比如 UI 组件库、工具函数。四、安装 Turborepopnpmadd-gturbo# 或者在项目中安装pnpmadd-Dturbo创建turbo.json{$schema:https://turbo.build/schema.json,pipeline:{build:{dependsOn:[^build],outputs:[dist/**]},dev:{cache:false,persistent:true},lint:{},test:{}}}pipeline定义了任务依赖关系。^build表示执行某个包的build之前先构建它的依赖包。五、创建共享组件库mkdir-ppackages/uicdpackages/uipnpminitpackages/ui/package.json中给包起个名字重要{name:myrepo/ui,version:0.0.1,main:./src/index.tsx,types:./src/index.tsx,scripts:{build:tsc}}安装 React 和 TypeScript 依赖在根目录执行pnpmadd-Dreact react-dom typescript types/react-w-w表示安装在根 workspace。写一个简单的 Button 组件packages/ui/src/Button.tsximport React from react; export const Button: React.FC{ children: React.ReactNode } ({ children }) { return button style{{ padding: 8px 16px, background: blue, color: white }}{children}/button; };packages/ui/src/index.tsxexport { Button } from ./Button;配置 TypeScriptpackages/ui/tsconfig.json{compilerOptions:{jsx:react-jsx,module:ESNext,target:ES2020,declaration:true,outDir:dist,strict:true},include:[src]}六、创建 React 应用我们用 Vite 创建一个 React 应用放在apps/webcdappspnpmcreate vite web--templatereact-tscdweb修改apps/web/package.json添加对共享包的依赖dependencies:{myrepo/ui:workspace:*,...}workspace:*表示使用当前 workspace 中的对应包。在apps/web/src/App.tsx中引入共享按钮import { Button } from myrepo/ui; function App() { return ( div h1Monorepo Demo/h1 Button来自共享组件库的按钮/Button /div ); } export default App;现在在根目录运行pnpm install它会自动链接本地包。七、配置 Turborepo 任务修改根turbo.json让build任务在 React 应用里产生输出{pipeline:{build:{dependsOn:[^build],outputs:[dist/**,build/**]},dev:{cache:false,persistent:true}}}然后在根package.json添加脚本scripts:{dev:turbo dev,build:turbo build,lint:turbo lint}运行pnpm devTurborepo 会同时启动两个应用的开发服务器如果你还有 Node 后端的话。第一次启动正常速度第二次因为缓存秒开。八、共享配置与依赖提升想在根目录统一管理 TypeScript、ESLint、Prettier 配置在根目录创建tsconfig.base.json然后每个子项目的tsconfig.json继承它// apps/web/tsconfig.json{extends:../../tsconfig.base.json,compilerOptions:{outDir:./dist}}ESLint 同理根目录装eslint每个子项目通过根配置运行。九、生产构建与部署运行pnpm buildTurborepo 会按照依赖顺序构建先构建myrepo/ui再构建apps/web。并且第二次构建时会复用缓存毫秒级完成。构建产物可以分别部署apps/web/dist部署到 Vercel/NetlifyNode 应用部署到服务器。因为它们在一个仓库里但部署是独立的。十、总结Monorepo 不是银弹但能救你于复制粘贴适合场景多个项目共享代码、团队规模中等、希望统一 CI/CD。不适合项目之间几乎没有依赖、团队权限隔离要求极高可加CODEOWNERS缓解。工具选择Turborepo 速度快、配置简单Nx 功能更强但复杂Lerna 已过时现在用 Nx 或 Turborepo。下次你又在不同项目间同步代码时想一想能不能把它们放进同一个 Monorepo用 Turborepo 一键构建省下的时间正好可以摸会儿鱼。

相关文章:

你的代码仓库变成“毛线团”了?Monorepo 用 Turborepo 拆成“乐高积木”

你维护着五六个项目,每个都单独开一个 Git 仓库。改一个公共组件,要挨个进每个项目,复制粘贴,提交,发布。一上午就没了。今天我们来学 Monorepo——用 Turborepo 把多个项目放进同一个仓库,共享代码、统一构…...

终极免费Flash反编译工具:JPEXS Free Flash Decompiler全新指南

终极免费Flash反编译工具:JPEXS Free Flash Decompiler全新指南 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler 你是否曾面对过这些困境?那些曾经精彩的Flash动画…...

基于FastAPI与MCP协议构建多服务AI工具集成平台

1. 项目概述与核心价值最近在折腾AI助手和代码编辑器集成的时候,发现一个挺有意思的需求:如何让Claude、Cursor或者Windsurf这类工具,能直接调用外部的天气、新闻、汇率这些实时数据?总不能每次都手动查了再复制粘贴吧。传统的做法…...

Clawtick CLI:统一命令行工具入口,提升开发运维效率

1. 项目概述:一个命令行里的“瑞士军刀”如果你和我一样,每天的工作都离不开终端,那肯定对命令行工具(CLI)又爱又恨。爱的是它的高效、直接和可编程性,恨的是不同工具之间五花八门的命令、参数和配置方式&a…...

终极指南:3分钟让你的PS4手柄在Windows上完美运行

终极指南:3分钟让你的PS4手柄在Windows上完美运行 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows 想让你的PS4手柄在Windows电脑上获得原生级的游戏体验吗?DS4Wind…...

IDEA卡在‘Resolving dependencies’?别急着重启,先试试这5个Maven/Gradle配置检查

IDEA卡在‘Resolving dependencies’?别急着重启,先试试这5个Maven/Gradle配置检查 每次看到IDEA底部进度条卡在"Resolving dependencies"时,那种焦躁感就像等快递显示"正在派送"却迟迟不到。大多数开发者会条件反射地点…...

除了上CDN,Unity微信小游戏包体优化还有这些“骚操作”:从插件源码到资源管理

突破20M限制:Unity微信小游戏深度包体优化实战指南 当Unity开发者将作品移植到微信小游戏平台时,20M的包体限制往往成为第一道技术门槛。这个看似简单的数字背后,实际上考验的是开发者对引擎机制、资源管理和平台特性的综合把控能力。本文将带…...

Cursor编辑器配置同步方案:基于Git与Shell脚本实现开发环境无缝漫游

1. 项目概述:一个为 Cursor 编辑器量身定制的配置同步方案如果你和我一样,是一个重度依赖 Cursor 这款“AI 原生”代码编辑器的开发者,那你一定遇到过这个痛点:辛辛苦苦在办公室的电脑上配置好了顺手的主题、快捷键、代码片段、AI…...

从实验室到工作站:手把手配置Ubuntu 20.04+CUDA 11.1开发环境,兼顾V100与3090混搭显卡

异构GPU集群实战:Ubuntu 20.04下V100与3090的CUDA 11.1协同配置指南 当实验室的计算节点同时搭载NVIDIA V100和RTX 3090显卡时,驱动安装会面临Volta与Ampere架构的版本兼容挑战。去年我们在部署某AI训练平台时,就遇到过驱动版本冲突导致3090无…...

打造高效心流体验:氛围感编码环境配置全攻略

1. 项目概述:一个为“氛围感编码”而生的资源宝库如果你和我一样,是个对工作环境、工具美学和流程仪式感有点“挑剔”的程序员,那么看到acvnace/awesome-vibe-coding-resources这个项目标题,大概率会会心一笑。这绝不是一个简单的…...

轻量化研究代理:基于Agent架构的自动化信息处理方案

1. 项目概述:轻量化研究代理的诞生背景与核心价值在信息爆炸的时代,无论是学术研究者、行业分析师,还是产品经理、内容创作者,都面临着一个共同的痛点:如何从海量的、碎片化的信息中,高效地筛选、整合、提炼…...

从《九章算术》到Python:手把手复现古人开方算法(附完整代码)

从《九章算术》到Python:手把手复现古人开方算法(附完整代码) 数学史与编程的碰撞总能擦出令人惊喜的火花。当我们在Python中敲下math.sqrt(2)时,很少有人会想到这个简单的函数背后,是两千多年来人类智慧的结晶。本文将…...

ViGEmBus内核级游戏控制器模拟:架构解析与高级故障排除方案

ViGEmBus内核级游戏控制器模拟:架构解析与高级故障排除方案 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 在游戏开发、输入设备测试和远程游戏…...

终极视频加速工具:5大技巧让你每天多出2小时的高效观看体验

终极视频加速工具:5大技巧让你每天多出2小时的高效观看体验 【免费下载链接】videospeed HTML5 video speed controller (for Google Chrome) 项目地址: https://gitcode.com/gh_mirrors/vi/videospeed 你是否经常觉得视频内容太慢,但又不想错过关…...

GTA5线上小助手:免费开源的游戏增强工具,让你的洛圣都冒险更轻松

GTA5线上小助手:免费开源的游戏增强工具,让你的洛圣都冒险更轻松 【免费下载链接】GTA5OnlineTools GTA5线上小助手 项目地址: https://gitcode.com/gh_mirrors/gt/GTA5OnlineTools 想要在《侠盗猎车手5》线上模式中获得更流畅的游戏体验吗&#…...

DeepSeek-TUI 终端智能交互实战指南

在终端里敲命令是开发者的日常,但面对复杂的管道组合、记不住的参数选项,或是深夜排查故障时急需一条精准的查询语句,我们常常不得不中断思路去搜索文档。这种上下文切换不仅打断心流,更降低了效率。如果终端本身就能理解自然语言…...

Atom编辑器中文汉化实战指南:告别英文困扰,打造专属中文编程环境

Atom编辑器中文汉化实战指南:告别英文困扰,打造专属中文编程环境 【免费下载链接】atom-simplified-chinese-menu Atom 的简体中文汉化扩展,目前最全的汉化包。包含菜单汉化、右键菜单汉化以及设置汉化 项目地址: https://gitcode.com/gh_mirrors/at/a…...

抖音下载神器:douyin-downloader免费批量下载工具完整教程

抖音下载神器:douyin-downloader免费批量下载工具完整教程 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback s…...

别再折腾了!手把手教你搞定Fluent UDF编译环境(附VS安装避坑指南)

从零构建Fluent UDF编译环境:Visual Studio深度配置与避坑实战 当你在深夜第三次重装Visual Studio,盯着屏幕上那个顽固的"Error: The UDF library you are trying to load is not compiled"提示时,可能已经怀疑人生。这不是你的问…...

如何高效实现小说资源自动化采集:Rust开源方案深度解析

如何高效实现小说资源自动化采集:Rust开源方案深度解析 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 番茄小说下载器(Tomato-Novel-Downloader&#…...

如何用JPEXS Free Flash Decompiler拯救你的Flash资源:5分钟快速上手指南

如何用JPEXS Free Flash Decompiler拯救你的Flash资源:5分钟快速上手指南 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler 你是否曾经为找不到Flash动画中的素材而烦恼&#…...

如何快速实现网易云音乐自动打卡:每天300首轻松冲级LV10的完整指南

如何快速实现网易云音乐自动打卡:每天300首轻松冲级LV10的完整指南 【免费下载链接】neteasy_music_sign 网易云自动听歌打卡签到300首升级,直冲LV10 项目地址: https://gitcode.com/gh_mirrors/ne/neteasy_music_sign 你是否也曾为了提升网易云音…...

从视频中智能提取PPT:3分钟快速生成PDF的终极指南

从视频中智能提取PPT:3分钟快速生成PDF的终极指南 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 你是否曾经需要从教学视频、会议录像或在线课程中提取PPT内容&#xff…...

QtScrcpy核心技术深度解析:从零构建跨平台Android投屏控制框架

QtScrcpy核心技术深度解析:从零构建跨平台Android投屏控制框架 【免费下载链接】QtScrcpy Android real-time display control software 项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy 在移动设备管理领域,实时投屏控制已成为开发者…...

ComfyUI-Manager终极指南:5个简单方法彻底解决节点冲突问题

ComfyUI-Manager终极指南:5个简单方法彻底解决节点冲突问题 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various …...

MySQL 8.0.46​ 与 MySQL 9.7.0在sql语句方面的区别并举例说明

系统对比 MySQL 8.0.46​ 与 MySQL 9.7.0,并结合 Java 场景给出可运行的示例说明。(不涉及 JDBC 驱动、连接方式等前置内容,只谈 SQL 本身)一、总体结论先行(SQL 层面)对比维度MySQL 8.0.46MySQL 9.7.0JSON…...

终极指南:如何用NHSE免费掌控你的动物森友会游戏体验 [特殊字符]

终极指南:如何用NHSE免费掌控你的动物森友会游戏体验 🎮 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 你是否曾为《动物森友会》中的资源收集而烦恼?是否梦想…...

AI写论文不用愁!4款AI论文生成神器,全方位助力论文高效完成!

撰写论文难题与 AI 工具推荐 在撰写期刊论文、毕业论文或职称论文的过程中,学术界人士常常会遇到许多棘手的问题。人工撰写论文时,面对海量的参考文献,寻找相关资料仿佛在大海中抓鱼;而复杂严谨的格式要求往往让人手忙脚乱&#…...

AI写论文高效秘籍!4款AI论文生成工具,让写论文不再痛苦!

在2025年,随着学术写作进入智能化的时代,越来越多的人开始依赖AI论文写作工具来协助撰写学术论文。在硕士和博士论文等长篇学术作品的写作过程中,许多工具仍然无法满足需求。它们往往缺乏理论的深度,或者逻辑上显得松散&#xff0…...

Scrapy-Pinduoduo:面向电商数据智能决策的拼多多数据采集解决方案

Scrapy-Pinduoduo:面向电商数据智能决策的拼多多数据采集解决方案 【免费下载链接】scrapy-pinduoduo 拼多多爬虫,抓取拼多多热销商品信息和评论 项目地址: https://gitcode.com/gh_mirrors/sc/scrapy-pinduoduo 在当前电商行业竞争白热化的背景下…...