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

pnpm+turbo迅速搭建monorepo工程

关于monorepomonorepo 并不是一个框架、一个包、一个依赖。而是一种单仓库多包管理模式也是基于中心化思想的实践产物。举个例子假设我们现在有6个项目传统的项目管理方式Multirepo会按照6个代码仓库去管理如果我们要进行开发、维护和部署就需要分别对这6个仓库进行“开刀”。而使用 monorepo 思想我们只需要在根项目下维护这6个项目那么也可以同样维护一套编码标准、一套开发流程、一套代码规范甚至是一套统一的部署脚本。优势对依赖统一管理模块引用方便跨项目/团队友好劣势统一管理代码库体积很大统一版本控制降低灵活性不易统一进行权限管理需要一定开发成本和团队适应过程什么场景适合monorepo项目之间代码引用过程较多资源共享丰富。跨项目/团队需求较大对接需求多。项目之间存在较多复用需求和依赖。为什么要用pnpm相信不少开发用了pnpm都会说“真香”相比yarn、npm、cnpm这些包管理工具pnpm做了很多优化具备空间小、下载快和结构简单等优势。【官网地址】空间小如果多个工程存在统一的依赖会创建一个相当于“快捷方式”的软链接使用时通过寻址的方式进行复用避免了重复安装依赖节省磁盘空间。下载快安装的依赖有缓存有记录之前若安装过就从存储区拿出来链接到node_modules无需多余的下载任务执行。结构简单相比npm依赖结构相对简单依赖中没有node_modules而是以.pnpm统一管理能够避免循环软链接。为什么要用turboTurborepo是Vercel 推出的高性能JS/TS构建工具尤其适合处理多包整合。其中也使用了缓存、增量构建、并行执行等优化手段提升落地效率的同时也能够吃到性能红利。【官网地址】搭建monorepo工程其实我们可以借助 pnpm 的 workspace 支持手动搭建 monorepo 工程这样确实更灵活。但这里使用 pnpm turbo 的方式搭建当然 turbo方便是一个因素更重要的是因为 turbo 更适合大型项目的 monorepo 方案落地构建效率会高很多。案例设计这里简单搭建 monorepo 工程子项目有两个分别是 front 和 utils。其中 front 指代业务侧用来调用 utils 中暴露的 add 和 mul 方法达到子项目之间的引用效果。前置要求Node版本在18以上pnpm版本在7以上。我这里使用的是22.17.0Node 10.33.0pnpm。初始化项目新建一个空的项目可以使用命令pnpm init -y使用 pnpm 包管理器安装 turbo 依赖。pnpm add turbo -d在根目录创建 pnpm-workspace.yaml 配置文件这个文件可以中可以配置 packages 属性表示工作空间生效的文件区域此处设置了业务侧apps和包侧packages。在根目录创建 turbo.json 配置文件其中 schema 为配置文件这里引用的是官方 json 地址真实的项目中可以拷贝到本地或者放到公司 CDN 服务器上进行托管减少不确定因素。{ $schema: https://turbo.build/schema.json, pipeline: { dev: { cache: false, persistent: true }, build: { dependsOn: [^build], outputs: [dist/**] } } }创建子项目utils新建utils和front项目文件夹每个项目都必须拥有一个package.json文件配置name命名规范格式为“ [自定义项目空间名称] / [当前包名] ”。在utils项目中新建一个工具文件index.js分别导出加减乘除的方法。export const add (a, b) a b; export const sub (a, b) a - b; export const mul (a, b) a * b; export const div (a, b) a / b;创建子项目front此处表示客户端业务侧就创建一个基于 React 框架模板的 vite 工程pnpm create vite apps/front --template react客户端项目初始化完成我们得到了一个基于 vite 的 react 项目结构现在我们希望在 front 工程中使用 utils 中的方法需要进入 front 项目的 package.json 文件在 dependencies 字段中声明要依赖的子项目名称和目标这里的子项目名称就是 utils 中 package.json 中的 name 属性值为workspace:*表示这个包的位置是从工作空间中引入的。我们简单引入一下 my-mono/utils 的包中的 add 和 mul 方法在 App.jsx 中使用。是否成功调用那到时候看看页面上如果显示的是“3”和“6”那么就表示 add 和 mul 方法成功调用也就意味着子项目之间的共享已经完成配置脚本此时 cd 到根目录使用 pnpm i 进行依赖安装。之后我们查看一下 front 目录的 node_modules 中若有 my-mono 的包相当于依赖已经引入成功。现在配置根项目的 package.json配置脚本运行 front 工程使用 --filter front就会命中 front 中的 package.json 的 scripts从而达到启动子项目的效果。dev:front: turbo dev --filter front此时查看预览发现出现了我们的预期“3”和“6”表示我们的 monorepo 工程搭建完成并且也实现了子项目之间的共享和交互。常见问题报错 pipeline 找不到这是因为安装的 turbo 是 2.x 版本这个版本将之前的 pipeline 对象名改成了 tasks所以在 turbo.json 中改成 tasks 就行了。报错找不到 packageManager这是因为 turbo2.x 版本强制要求了必须在 package.json 中显式定义包管理器在 package.json 中加入 packageManager 就可以了。

相关文章:

pnpm+turbo迅速搭建monorepo工程

关于monorepo monorepo 并不是一个框架、一个包、一个依赖。而是一种单仓库多包管理模式,也是基于中心化思想的实践产物。 举个例子,假设我们现在有6个项目,传统的项目管理方式(Multirepo)会按照6个代码仓库去管理&a…...

3步精通Calibre电子书转换:从格式兼容到专业排版指南

3步精通Calibre电子书转换:从格式兼容到专业排版指南 【免费下载链接】calibre The official source code repository for the calibre ebook manager 项目地址: https://gitcode.com/GitHub_Trending/ca/calibre 在数字阅读时代,电子书格式碎片化…...

告别论文格式内耗!从标题层级到参考文献,这款工具一键搞定全流程合规排版

在学位论文撰写中,标题层级混乱、页眉页脚错位、参考文献格式不统一、图表排版杂乱是贯穿全文的高频痛点,堪称学术写作的 “格式重灾区”。传统 Word/WPS 依赖手动刷样式、调格式,耗时数小时还易反复出错;LaTeX 门槛高、中文适配差…...

YOLOv12:以注意力机制重塑实时目标检测的精度与速度边界

1. YOLOv12如何重新定义实时目标检测 当你在手机上刷短视频时,那些自动标记出人物、宠物和物品的方框;当你在超市自助结账时,摄像头快速识别商品的过程;当自动驾驶汽车实时判断前方路况时——这些场景背后都有一个共同的技术支撑&…...

Qwen3-TTS开源模型快速上手:5分钟完成中文普通话+粤语+英文三语语音合成

Qwen3-TTS开源模型快速上手:5分钟完成中文普通话粤语英文三语语音合成 想不想让你的应用开口说话?不是那种机械的电子音,而是像真人一样,有感情、有语调,甚至能说方言的语音?今天要聊的Qwen3-TTS&#xff…...

Nacos 2.2.0连接达梦数据库踩坑实录:从驱动版本到SQL脚本的完整避坑指南

Nacos 2.2.0与达梦数据库深度适配实战:从驱动选型到容器化部署的全链路解析 当微服务架构遇上国产数据库,技术适配的每个环节都可能成为关键战场。最近在将Nacos 2.2.0与达梦数据库进行生产级适配时,我经历了从驱动版本冲突到SQL脚本优化的完…...

基于RexUniNLU的Linux系统日志智能分析方案

基于RexUniNLU的Linux系统日志智能分析方案 1. 引言 每天面对海量的Linux系统日志,是不是感觉头大?服务器突然卡顿,排查问题就像大海捞针,一行行翻日志看得眼睛都花了。传统的关键词搜索和正则匹配已经跟不上现代运维的需求&…...

Skills 如何高效地扩展 Claude 的能力

在模块化配置体系中,rules(规则)决定了 Claude 的下限(不能搞砸什么),而 skills(技能)则决定了 Claude 的上限(能多快、多准地完成复杂任务)。高效扩展 Claud…...

PyTorch 2.5镜像体验:预装全套工具,让AI项目开发效率翻倍

PyTorch 2.5镜像体验:预装全套工具,让AI项目开发效率翻倍 1. 为什么选择预装环境的PyTorch镜像? 深度学习项目开发中,最令人头疼的往往不是算法设计或模型调优,而是环境配置这个看似简单却暗藏玄机的工作。想象一下这…...

DeOldify API速率限制:令牌桶算法实现每用户每小时1000次调用

DeOldify API速率限制:令牌桶算法实现每用户每小时1000次调用 1. 为什么需要API速率限制 在构建基于DeOldify的图像上色服务时,我们面临一个重要的技术挑战:如何公平合理地分配计算资源。深度学习模型推理需要消耗大量的GPU计算资源&#x…...

动态规划 -- 最长公共子序列

最长公共子序列的结构设序列 X{x1,x2,…,x m} 和 Y{y1,y2,…,y n} 的最长公共子序列为 Z{z1,z2,…,z k},则有以下结论:若 x my n,则 z kx my n,且 Z k−1(即 Z 去掉最后一个元素 z k 后的子序列)是 X m−1&…...

OpCore Simplify:自动化OpenCore EFI配置的革命性工具

OpCore Simplify:自动化OpenCore EFI配置的革命性工具 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore Simplify是一款专为Hackinto…...

玩转西门子S7-1200气力输送仿真系统

气力输送系统管道气力输送系统 (21)采用西门子S7-1200博图WinCC画面组态,博图V16及以上版本都可以仿真运行,无需硬件。 系统带有手动/自动模式,运行数据动态实时显示,带压力实时曲线显示&#x…...

TikTok GMXMAX广告优化全攻略

在2026年,TikTok广告投放逐渐向自动化模型演进,其中GMX MAX(GMV Max)成为很多团队用来提升ROI和放量的重要方式。相比传统广告模式,它可以自动完成受众匹配与预算分配,减少大量人工干预。不过在实际操作中&…...

单细胞分析进阶:手把手教你用hdWGCNA挖掘Treg细胞关键基因模块(附完整代码)

单细胞分析进阶:手把手教你用hdWGCNA挖掘Treg细胞关键基因模块(附完整代码) 在免疫微环境中,调节性T细胞(Treg)扮演着维持免疫平衡的关键角色。理解这些细胞的基因共表达网络对于揭示其功能机制至关重要。本…...

Anthropic泄露新一代Claude Mythos 模型,具备网络安全漏洞检测优势

配置错误曝光新模型Anthropic PBC 内容管理系统的一处配置错误意外泄露了其正在测试的新型大语言模型 Claude Mythos。该公司周四向《财富》杂志证实,工程师已完成该模型的训练工作,目前正与早期客户进行试点测试。Anthropic 强调这是其"迄今为止构…...

OpCore Simplify:革新黑苹果配置流程——从繁琐到智能的EFI构建方案

OpCore Simplify:革新黑苹果配置流程——从繁琐到智能的EFI构建方案 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore Simplify是一款…...

北海特色美食哪家好

在北海,海鲜始终是餐桌上最核心的语言,但从风味调性来看,无论是早市现捞的海虾、生蚝,还是北部湾的鳗鱼、鲍鱼,呈现出的多为“鲜甜”“咸鲜”这类闽粤沿海常见的味觉模式。游客在选择时往往面临两个现实:一…...

HFSS19 实战解析:SMA接头馈电的微带分支滤波器仿真

1. SMA接头与微带分支滤波器设计基础 作为一名射频工程师,设计紧凑型滤波器是日常工作的重要部分。这次我们要用HFSS19仿真一个SMA接头馈电的微带分支带通滤波器。先说说为什么选择这个组合:SMA接头是射频电路中最常见的连接器之一,工作频率可…...

3步掌握MelonLoader:面向Unity开发者的游戏扩展加载器实战指南

3步掌握MelonLoader:面向Unity开发者的游戏扩展加载器实战指南 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader Unit…...

SDMatte提示词库共建:分享与收集高效抠图的魔法指令

SDMatte提示词库共建:分享与收集高效抠图的魔法指令 1. 为什么需要提示词库 抠图是设计工作中最常见的需求之一,但每次都要从头开始描述需求既费时又低效。这就好比每次做饭都要从认识食材开始,而不是直接使用现成的菜谱。SDMatte作为智能抠…...

3步告别音乐APP的广告轰炸,这款开源工具让你回归纯粹聆听

3步告别音乐APP的广告轰炸,这款开源工具让你回归纯粹聆听 【免费下载链接】tonzhon-music 铜钟 (Tonzhon.com): 免费听歌; 没有直播, 社交, 广告, 干扰; 简洁纯粹, 资源丰富, 体验独特!(密码重置功能已回归) 项目地址: https://gitcode.com/GitHub_Tre…...

MedGemma-X镜像轻量化:去除冗余依赖+精简日志+压缩缓存的体积优化实践

MedGemma-X镜像轻量化:去除冗余依赖精简日志压缩缓存的体积优化实践 1. 引言:为什么需要优化MedGemma-X镜像? 如果你已经体验过MedGemma-X的强大功能——那种像专业医生一样“对话式”阅片的智能体验,可能会发现一个现实问题&am…...

快速掌握Fast-F1:Python赛车数据分析终极指南

快速掌握Fast-F1:Python赛车数据分析终极指南 【免费下载链接】Fast-F1 FastF1 is a python package for accessing and analyzing Formula 1 results, schedules, timing data and telemetry 项目地址: https://gitcode.com/GitHub_Trending/fa/Fast-F1 想要…...

使用Python运行VirtualLab Fusion光学仿真

摘要 VirtualLab Fusion允许Python外部访问其建模技术、求解器和结果。这个用例介绍了一种使用路径变量和Visual Studio代码将Python连接到VirtualLab Fusion的简单方法。在本示例中,我们将演示如何使用Python脚本运行光学仿真,以向用户简要概述这种跨…...

影刀RPA与Python变量管理:全局与局部变量的实战应用

1. 全局变量与局部变量的核心区别 在影刀RPA中编写Python脚本时,变量管理是影响代码质量的关键因素。全局变量就像办公室的公告板,所有部门(函数)都能看到并修改;而局部变量则是员工个人笔记本上的临时记录&#xff0c…...

FreeRTOS任务切换时,Cortex-M内核的PSP和MSP指针到底怎么变?一个动画讲清楚

FreeRTOS任务切换时Cortex-M内核PSP与MSP指针变化全解析 当你在调试一个嵌入式系统时,突然遇到栈溢出导致的崩溃,那种感觉就像在黑夜里摸索——你知道问题出在哪里,但就是看不清细节。作为一名嵌入式开发者,理解FreeRTOS在Cortex-…...

OpenClaw+GLM-4.7-Flash:个人财务管理自动化实践

OpenClawGLM-4.7-Flash:个人财务管理自动化实践 1. 为什么需要自动化财务管理 每个月末,我都会面对一堆散乱的电子账单和银行流水。手动整理这些数据不仅耗时,还容易出错。直到我发现OpenClaw与GLM-4.7-Flash的组合,才真正实现了…...

从零开始掌握Retrieval-based Voice Conversion WebUI:AI语音转换完整指南

从零开始掌握Retrieval-based Voice Conversion WebUI:AI语音转换完整指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI 语音数据小于等于10分钟也可以用来训练一个优秀的变声模型! 项目地址: https://gitcode.com/GitHub_Trending/re/Re…...

macOS效率工具:Dozer极简菜单栏管理方案

macOS效率工具:Dozer极简菜单栏管理方案 【免费下载链接】Dozer Hide menu bar icons on macOS 项目地址: https://gitcode.com/gh_mirrors/do/Dozer 在现代工作环境中,macOS用户常常面临菜单栏图标过多导致的视觉混乱问题。随着各类应用程序的安…...