尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

读懂ngx-starter-kit的Nx Monorepo架构:30+可复用库如何组织大型Angular项目

读懂ngx-starter-kit的Nx Monorepo架构:30+可复用库如何组织大型Angular项目 读懂ngx-starter-kit的Nx Monorepo架构30可复用库如何组织大型Angular项目【免费下载链接】ngx-starter-kit:a: Angular :rocket: NestJS :monkey: Starter Kit项目地址: https://gitcode.com/gh_mirrors/ng/ngx-starter-kitngx-starter-kit 是一个基于Nx Monorepo的 Angular NestJS 起步套件它把前端webapp、后端 APIapi和 30 多个可复用组件库libs放在同一个工作区里统一管理。本文将用通俗的方式带你快速看懂这套大型 Angular 项目的组织方式帮助你理解 Monorepo 架构的实际价值。一、为什么大型 Angular 项目需要 Monorepo当你把登录、通知、聊天、仪表盘等功能全部堆在一个应用里时会迅速遇到这些问题代码找不到一个按钮组件到底在哪个目录构建越来越慢改一行代码整个项目重新编译复用困难另一个项目想用同样的登录模块只能复制粘贴Nx Monorepo的解法很直观把大项目拆成一个个独立的小模块应用 App 库 Lib但放在同一个仓库里共享依赖、统一版本、一条命令跑起来。ngx-starter-kit 正是这种思路的完整示范。二、先看全景仓库三大区域打开项目根目录你会发现整个仓库只分三大块目录角色说明apps/可运行的应用webapp前端、apiNestJS 后端、backendlibs/可复用库30 个组件库是项目的积木仓库docs/文档概念、进阶配方、FAQ学习路径清晰这种应用 库的分区就是 Monorepo 最核心的结构。三、30 个可复用库是怎么划分的libs/目录下每个子目录都是一个独立库各自拥有独立的project.json、tsconfig和jest测试配置。按职责大致可以分成四类1️⃣ 基础设施类库libs/core/全局服务、状态管理、菜单数据等核心能力libs/ngx-utils/44 个工具文件指令与工具函数集合libs/utils/、libs/models/通用工具与数据模型2️⃣ 认证与通信类库libs/auth/OAuth2 登录、路由守卫auth.guard / admin.guard、授权流程libs/socketio-plugin/实时通信插件libs/notifications/通知功能3️⃣ UI 组件类库libs/widgets/70 多个文件的小部件集合libs/grid/、libs/tree/数据表格与树形控件libs/chat-box/聊天窗口libs/loading-overlay/、libs/app-confirm/、libs/led/ 等轻量组件4️⃣ 页面容器类库libs/home/、libs/dashboard/、libs/admin/、libs/experiments/每个库都有明确的身份标签。以 libs/auth/project.json 为例projectType: library声明它是库而非应用tags: [private-module, core-module]打上业务标签方便 Nx 做依赖分析与任务过滤给新手的提示想读懂某个功能先找对应的libs/xxx目录再进src/lib/看组件基本就能定位到核心代码。四、库之间如何互相引用路径别名是关键30 多个库之间需要互相引用比如dashboard会用widgets里的图表ngx-starter-kit 用路径别名Path Mapping优雅地解决了导入问题。打开 tsconfig.base.json你会看到一长串paths配置把每个库映射成ngx-starter-kit/xxx的形式ngx-starter-kit/auth→libs/auth/src/index.tsngx-starter-kit/widgets→libs/widgets/src/index.ts带来的好处✨导入干净import from ngx-starter-kit/auth替代一长串相对路径入口统一每个库只通过src/index.ts对外暴露内部实现可随意重构未来可发 npm别名前缀与npmScope一致随时可以把某个库拆出去发布同时npm workspaces见 package.json把libs/*和apps/*都纳入工作区实现一次npm install安装所有模块的依赖。五、Nx 如何调度这些模块构建、测试与缓存Monorepo 的最大痛点是构建慢Nx 用三招解决1. 每个模块独立的任务定义每个库/应用都有自己的project.json定义build、test、lint等任务。例如 libs/auth/project.json 配置了 Jest 单元测试nx test auth即可单独运行。2. 任务缓存nx.json 中声明了cacheableOperations对 build、lint、test、e2e 等任务开启缓存——没改过的模块直接命中缓存秒级完成。3. affected 命令只跑受影响的模块这是 Monorepo 的杀手级能力。在 package.json 的 scripts 里你会看到一整组affected命令npm run affected:test # 只测试受当前改动影响的模块 npm run affected:build # 只构建受影响的模块 npm run dep-graph # 可视化整个仓库的依赖图实际效果你只改了chat-box库那么 CI 就只会为它及其依赖方跑测试而不是全仓库 30 模块排队执行。六、前后端同仓Angular 与 NestJS 如何共存这个项目的另一个亮点是前后端同仓PANTS 栈PostgreSQL、Angular、NestJS、TypeScriptapps/webapp/Angular 14 前端含 Jest 单测 Cypress e2e 测试apps/api/NestJS 后端按业务域划分子模块auth、chat、user、project、notifications 等见 apps/api/src/app/两边共享tsconfig.base.json与统一的 ESLint/TS 规范TypeScript 版本永不打架前端通过 apps/webapp/proxy.conf.json 配置代理直连本地 API 开发环境配置则统一放在src/environments/下并用env/*别名引入见 tsconfig.base.json。七、这套架构能教会新手的 5 件事 按功能分库而不是按技术分目录——auth、grid、dashboard都以业务命名每个模块自包含——组件、样式、测试、配置文件全部放在一起用 tags 给模块打标签——支撑 Nx 的依赖分析与增量构建别名 入口文件控制模块边界——对外 API 收敛在index.tsaffected 思维——日常开发永远只关心我改动的波及范围八、想上手最短路径清单想做什么去哪里看了解整体安装与运行README.md理解状态管理概念docs/concepts/学习模块化进阶docs/advanced/composition.md查看单元测试写法docs/recipes/unit-testing.md跑起来试试克隆仓库后执行npm install与npm run start:mock总结ngx-starter-kit 的价值不只是一个好看的 Angular 模板更是一套可直接照搬的Nx Monorepo 组织方法论——30 个可复用库、前后端同仓、增量构建与任务缓存让大型 Angular 项目依然保持快速、清晰、可复用。【免费下载链接】ngx-starter-kit:a: Angular :rocket: NestJS :monkey: Starter Kit项目地址: https://gitcode.com/gh_mirrors/ng/ngx-starter-kit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表