尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
sample-monorepo 依赖管理秘籍:为什么 devDependencies 统一放根目录更高效?
sample-monorepo 依赖管理秘籍为什么 devDependencies 统一放根目录更高效【免费下载链接】sample-monorepoSample monorepo setup with npm workspaces and typescript project references项目地址: https://gitcode.com/gh_mirrors/sa/sample-monorepomonorepo 依赖管理是前端工程化绕不开的话题而 sample-monorepo 这个基于 npm workspaces 与 TypeScript project references 的开源示例仓库给出了一套教科书级的答案把所有 devDependencies 统一放在根目录 package.json而 dependencies 按包拆分。本文将从零拆解这套依赖管理方案的原理、收益与实操帮你快速搞懂为什么这是更高效的选择。一、先认识 sample-monorepo一个开箱即用的 monorepo 示例sample-monorepo 是一个典型的前端 monorepo 示例项目核心特性是npm workspaces TypeScript project references的组合。仓库里内置了三个可运行的示例包包名职责关键依赖sample/componentsReact 组件库peerDependencies: reactsample/appReact 应用sample/components、sanitize.csssample/serverExpress 服务端含 SSRsample/app、express、compression所有子包统一放在packages/目录下根目录的 package.json 用一行workspaces: [packages/*]声明工作区配合 lerna.json 的useWorkspaces: true就完成了最基础的 monorepo 骨架搭建。二、monorepo 依赖管理的常见痛点为什么要统一在传统一个项目一个仓库模式下每个项目各自维护一套 devDependencies会带来三宗罪版本漂移TypeScript、ESLint 等工具链在不同仓库中版本不一行为不一致问题难以复现重复安装每个仓库都要在自己的 node_modules 里装一遍 webpack、prettier磁盘和安装时间都被浪费升级困难想升级某个构建工具得挨个仓库改 package.json、逐个验证。而 monorepo 恰好能化解这些问题所有包共享同一套依赖树devDependencies 天然应该收敛到根目录。三、核心秘籍devDependencies 统一放根目录的 4 大好处1. 单一版本源杜绝版本漂移打开根目录 package.json 可以看到typescript~5.8.3、webpack^5.101.0、eslint^9.32.0、prettier 等全部构建相关依赖都集中在此。全仓库只有一个版本定义团队成员再也不用争论为什么你的构建结果和我的不一样。2. 只保留一份 lock 文件安装结果可复现这是最容易被忽视的好处。所有依赖统一安装在根目录的 node_modules 中整个仓库只有一份 package-lock.jsonnpm 会使用与单包项目相同的去重dedupe机制。这意味着安装体积更小、速度更快CI 环境拉取依赖时的缓存命中率更高依赖树完全可复现排查问题只需看一份 lock 文件。3. 升级依赖只需改一处当你想升级 ESLint 或 TypeScript 时只需在根目录执行一次npm i package -D全仓库所有包立刻生效配合npm run prettify之类的根级脚本整个 monorepo 的工具链升级一次搞定。4. 配合 TypeScript project references构建链路更清爽根目录的 tsconfig.json 采用 solution 风格通过references引用packages/app/src、packages/components/src、packages/server/src三个子项目而每个子包的 tsconfig.json 只需extends根目录的 tsconfig.base.json。工具链统一 配置统一让tsc --build一次增量编译全部子包构建速度肉眼可见地提升。四、依赖分工原则devDependencies 归根目录dependencies 归各包sample-monorepo 的依赖管理可以总结成一句话devDependencies 只出现在根目录dependencies 与 peerDependencies 只出现在需要它们的子包中。理由也很简单子包会独立发布到 npm运行期依赖必须随包走而构建、测试、格式化等开发期工具只在仓库内使用收敛到根目录最合理。以 packages/app/package.json 为例它的dependencies只声明了sample/components和sanitize.csspeerDependencies声明了 react、react-dom而在根目录 package.json 里react、react-dom 以 devDependencies 形式出现供构建打包使用——分工非常清晰。五、最快上手方式clone 后只需 3 条命令想把这套 monorepo 依赖管理方案跑起来clone 仓库后按以下步骤操作克隆仓库git clone https://gitcode.com/gh_mirrors/sa/sample-monorepo在根目录执行npm i一次安装所有子包依赖自动就位执行npm run build增量编译全部 TypeScript 子项目执行npm start启动客户端开发模式或npm run start:server体验 SSR 服务端渲染。新增一个子包也极其简单把包丢进packages/目录重跑一次npm i即可workspaces 会自动建立包与包之间的链接关系。六、与 Lerna 协同发布也能一键完成sample-monorepo 还集成了 Lerna见 lerna.json用于多包发布场景。由于依赖关系清晰npx lerna publish会自动识别变更的包并询问新版本号配合每个包prepack脚本里的自动构建发布流程几乎零心智负担。依赖管理管得好连发布都省心。七、常见疑问速答Q为什么 react、react-dom 放在根目录 devDependenciesA它们在这里承担构建期依赖角色webpack 打包用运行时则由子包的 peerDependencies 约束版本二者职责不冲突。Q子包内部可以有自己的 devDependencies 吗A可以但不推荐。示例仓库的做法是保持根目录唯一避免同一工具在仓库内出现多份版本破坏单一版本源原则。Q这套方案适合多大的团队A非常适合中小型团队或组件库 应用 服务端的多包项目越早统一依赖管理后期升级成本越低。结语sample-monorepo 用极简的工程结构演示了一个重要道理monorepo 依赖管理的精髓不是工具多花哨而是边界清晰。把 devDependencies 统一收进根目录让 dependencies 各归其位配合 npm workspaces 的去重安装与 TypeScript project references 的增量构建你也能轻松拥有一套高效、可维护、可复现的依赖管理方案。【免费下载链接】sample-monorepoSample monorepo setup with npm workspaces and typescript project references项目地址: https://gitcode.com/gh_mirrors/sa/sample-monorepo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

免费去除水印、修复老照片:GIMP Resynthesizer 插件 5 分钟上手指南

免费去除水印、修复老照片:GIMP Resynthesizer 插件 5 分钟上手指南

免费去除水印、修复老照片:GIMP Resynthesizer 插件 5 分钟上手指南 【免费下载链接】resynthesizer Suite of gimp plugins for texture synthesis 项目地址: https://gitcode.com/gh_mirrors/re/resynthesizer 如果你正在为图片上的水印发愁,或…

📅 2026/10/20 13:57:17
5分钟快速上手Dat Desktop:从安装到完成第一次文件分享的完整教程

5分钟快速上手Dat Desktop:从安装到完成第一次文件分享的完整教程

5分钟快速上手Dat Desktop:从安装到完成第一次文件分享的完整教程 【免费下载链接】dat-desktop Peer to peer data syncronization [ DEPRECATED - More info on active projects and modules at https://dat-ecosystem.org/ ] 项目地址: https://gitcode.com/g…

📅 2026/8/23 10:53:07
从零构建AI智能体:基于LangChain与LangGraph的ReAct实战指南

从零构建AI智能体:基于LangChain与LangGraph的ReAct实战指南

最近在技术社区和招聘网站上,AI Agent(智能体)开发的热度持续攀升。很多开发者,无论是刚入行的新手还是希望转型的程序员,都对这个领域充满好奇,但面对海量的概念、框架和工具,往往感到无从下手…

📅 2026/9/8 7:11:27
MORE NEWS

更多资讯

📰

Transformer架构演进:算法与硬件协同优化的五条主干路径

1. 这不是“又一篇讲Transformer的科普”,而是架构师视角下的算法演进路线图你点开这篇文章,大概率不是为了再听一遍“Attention is All You Need”那篇论文讲了什么。你可能刚在项目里被Qwen3的长文本推理卡住响应延迟,也可能在调参时发现La…

📰

联想Qira跨设备协作技术解析与应用体验

1. 联想Qira深度体验:CES最佳创新奖背后的技术革命第一次把联想Qira从包装盒里取出来时,我就意识到这绝不是普通的智能设备。作为CES2023创新奖得主,这台设备用磁吸式设计把手机、平板和笔记本三种形态完美融合,当我用指尖轻推屏幕…

📰

知识库编译成Wiki:把检索权交给LLM的工程实践

1. 为什么要把知识库“编译”成 Wiki第一次听到“LLM Wiki”这个词,很多人会下意识地把它理解成“给大模型用的维基百科”。这个理解只对了一半。真正做过知识库落地的人会明白,Wiki 在这里不是指某个具体网站,而是指一种结构化的、可被人和机…

📰

少样本学习技术实践:从元学习框架到生产部署

1. 少样本学习应用的行业现状与挑战在AI应用开发领域,数据饥渴问题一直困扰着从业者。传统深度学习模型往往需要成千上万的标注样本才能达到理想效果,但在医疗诊断、工业质检等专业场景中,获取大规模标注数据既昂贵又不现实。这就是为什么少样…

📰

从Codex到OpenWorkBuddy:Agent工作台如何重塑AI编程工作流

我前后用了整整一个季度的 Codex,最后把它卸掉换成了 OpenWorkBuddy,原本以为只是换个模型入口,整理下来才反应过来——我换掉的不是模型,是整个 Agent 的工作方式。这事挺值得展开聊的,因为很多人正卡在同一个路口&am…

📰

HoRain云与CrewAI智能体开发实战指南

1. HoRain云与CrewAI智能体开发概述在当今企业数字化转型浪潮中,智能体技术正成为提升业务自动化水平的核心工具。HoRain云作为国内领先的企业级云服务平台,近期集成了CrewAI框架,为开发者提供了构建智能体的完整解决方案。这套组合特别适合需…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬