96SEO 2026-05-07 10:47 0
说实话,那种毫无意义的返工,我经历得太多了多到想吐。后端那边字段刚geng新,前端这边往往还在按老逻辑跑;或者kan起来类型dou对,实际请求体却对不上号。编译器那边一路绿灯,结果到了线上才发现分支走岔了。一出问题,大家第一反应就是怀疑 prompt 写得不够好,改了两轮发现不对劲——这哪里是模型的问题,根本就是仓库里没有一套固定的摆放方式,模型猜这一步猜对了下一步就和别处打架了。

语法、SQL 语句、HTTP 状态码这些硬骨头我啃得动,Zui烦的是两半各搞各的目录结构、README 文档、环境变量配置。每次改需求前,还得先在心里默念一遍口头合同,明明明明是一个东西,Zui后却干出了两份工,这种感觉太糟糕了。
hen长一段时间里我dou觉得多仓库是天经地义的:前端一个仓,后端一个仓,再加个共享类型包、组件库,听起来分工清清楚楚,逻辑上也说得通。但现实往往hen骨感。我以前在多仓库里改过一个 shared type,心里会一直挂着还有没有哪个仓库没 bump 版本;现在在同一个 workspace 里至少引用关系摊开在同一套工具链底下TypeScript 的类型检查或者单元测试常常比人肉geng早喊疼——哪里还在用旧字段,哪里页面还在按老形状解构,grep 一下心里也有谱。
树一展开,比在文字里凭空想象直观得多。把所有代码塞一个仓库,当然只解决找得到文件的问题,不解决你在 apps/api 里照样把 controller、service、库表访问、杂七杂八工具揉成一团的问题。特别是现在 AI 一次改五个文件,Ru果结构松散,耦合只会涨得geng快。
在会上听了王泽老师的分享,我第一次真正接触到了 Monorepo 这个概念。微软出品的,专门为 Monorepo 打造的项目管理工具,确实让人眼前一亮。包管理、CI 流程、分支管理虽然照旧是两套角色,但至少不用每次从零切换脑回路。熟了以后hen难再忍受接口栏两头吵的尴尬局面。
第一次学 NestJS,hen多人dou会嫌它“重”:Module、Controller、Service、Guard、Pipe、Interceptor,条条框框比 Express、Fastify 裸奔多出一大截,脚手架一念心里先咯噔一下。但我后来承认,那些让我觉得烦的概念,多半正是复杂之后必然会回来的质问——HTTP 入口到底挂在哪儿,业务逻辑Neng不Neng别再黏在路由文件里鉴权和校验是不是每次dou重写一遍,异常Zui后统一长成什么样,跨模块的Neng力Neng不Neng复用而不是复制粘贴?你Ke以在项目hen小的时候装作没kan见,等体积上来它们会以技术债的形式狠狠敲门。
构造函数里写字段比一层层 ../../../../ 好跟,对人类和编辑器来说dou一样。NestJS 自带 microservices传输层那一套,真要把 auth 或者大活拆出去,也还是在同一套路子里长枝,不用再拍脑袋起一套谁也不知道的新规矩。新人上手也会轻松一点:不必先听完三场口头约定才Neng下手改第一段代码,结构本身就带着大部分的“别这么写”。这当然不完美,但比纯粹依赖自律要省心得多。
至于 Express、Fastify 裸着写,我见过太多靠自觉Zui后靠不住的例子。轻量栈写小服务确实爽快,HonoElysia 我dou用过但业务一长我还是想有一层大家dou认的摆放。AdonisFoalTS 也行,只是模版和社区我这儿常碰到的是 Nest。我不再纠结算不算魔法,只在乎新来的、审稿的、还有自动补全,是不是在同一个习惯里读这套目录。
现在问 AI 顺手写一段代码,在圈子里早就不算新闻了。身边人多少dou会用用 CursorCopilot 一类工具,写 TS改多文件的仓库,编辑器也确实geng好跟一点。但真到了天天开工、AI 也跟着一起改的时候,摩擦就出来了——业务明明是一套东西,代码却被切成几块互不接壤的地盘,没有哪个仓库Neng单独回答这一整块系统在干什么。人还Neng靠记忆和聊天记录勉强对齐,模型手里往往只有当前文件附近那点片段,它没有你那套“我懂的”脑内地图。
我以前当装饰器和 DI 是口味问题,现在要带着助手一起kan代码,utils.ts 堆一切Zui头疼。Nest 那点样板至少是固定格式:@Controller 像关口,@Injectable 多半进构造函数,Module 的 importsproviders Nengkan出依赖往哪边走。错误还会犯,多数是接错一层,不至于每个文件一种新的脾气。
听上去怪,Neng力强了本应少管。我这边反正是反过来的,一次多出好几个文件,结构松的话脏东西也一起铺开。同样一个模型,在规矩紧的 Nest + Monorepo 里多半是补边角,在老脚本堆里经常是 import 散了、校验抄三遍、service 和 controller 又掰扯不清。
前端写了多年 TS,后端再随便 any 心就裂着了。契约放在 libs/types 或用生成出来的 SDK 锁住一层,漂移少一桩是一桩。若以 Next.js App Router 或类似前端为主力,只是把 Nest 当成好好写业务和善后数据的那一半,这一套目录语言其实不难对齐。路由负责入口像 page,service 像抽出去的 server lib,pipe 和 interceptor 像中间件层。
端到端类型上,有人喜欢 tRPCzod 推断加共享 router,有人喜欢 OpenAPI 生成 client。任选一条你Neng长期维护的主线,把契约锁在 libs/types 或生成的 SDK 里AI 在前端敲 mutationfetch 时少一半凭空造字段。本地开发里turbo跑 dev,改 shared 类型后两端热geng新的节奏,也常和 AI 快速试错一小步合上拍。部署侧hen多平台Neng对 monorepo 按 app 建制品,我不再想维护两份各写各的环境变量叙事。
大家聊 Monorepo,常常一上来就是依赖 hoist、构建缓存、CI 提速、版本对齐——这些dou实打实地省钱省时间。若你用的是 Turborepo、Nx 这类任务编排,改 libs/types 再触达 apps/web 时turbo run build --filter=... 一类命令往往只跑受影响的那几条边,CI 和本地反馈dou轻一些;AI 一口气动多个包的时候,也不太容易因为全量 build 太慢把思路打断。
但我日常感触geng深的,反而是geng土的几件事:全局搜索Neng跨过 apps 和 libs,跳转定义不会再跳到另一个克隆仓库;开一个合并请求Ke以同时改 apps/api前端调用处和 libs/types,评审的人也不用先在脑子里拼接三四份改动。
CI 里只对改动的 app 跑 turbo run test --filter=...@...之类,也早Yi是常规操作。共享代码动了顺带跑会消费它的那几个 app,而不是每次全矩阵。托管侧不少平台认得 monorepo 根目录,apps/web 走静态或边缘,apps/api 单独开服务。源码和契约仍在一处捏着,生命周期和扩容却Ke以拆开kan,不必心理上先投降成巨石。
我现在的习惯Neng多懒就多懒,先跑测试和类型检查,再读业务。让 AI 顺手起一版 VitestJest 或 e2e 骨架并不贵,红线测试挂了就先迭代 prompt。绿了再谈边界条件。@Injectable 的好处是 mock provider 也相对直来直去,审 diff 的人会轻松一点。后端也不可Neng接口跑亮就结案,需求和权限还来。框架不写业务,只少几次从口头上重新约分层。
当然这路也不是一帆风顺的。比如配置 NestJS Monorepo 时你可Neng会遇到 EntityMetadataNotFoundError: No metadata for “User” was found 这种让人抓狂的报错。这通常是因为 nest-cli.json 里的编译选项配置不对,webpack 没管好,或者路径解析出了问题。这时候别慌,检查一下 entities 的路径配置,确保 compilerOptions 里的 webpack 设置正确,往往就Neng解决。
还有一种常见的摆放方式大概是这样:
apps/api: 后端服务主体
apps/web: 前端应用
libs/types: 共享类型定义
libs/utils: 工具函数库
我平常就这么默认:Monorepo 先合上上下文,Nest 把后端层压住剩下的靠习惯和 CI。写得多漂亮不敢说只希望一群人加机器一起改的时候,烂得慢一点。Nest + Monorepo 对团队的价值,不在于消灭分歧,而在于把大量本该口头重复的规矩,换成打开仓库就Nengkan见的骨架——新功Neng默认落在哪个 app,共享代码朝哪个 lib 收敛,鉴权和 DTO 的习惯写法是什么。AI 这时geng像在同一套轨道上补齐缺口,而不是每人拉着模型朝不同方向发明范式。
产业报告里偶尔也Nengkan到 Monorepo 与geng高采纳率、geng少来回改放在一块儿的讨论,口径各自不同,我不打算在这里背具体百分比。我自己觉得geng实在的一点是同一套索引里改契约,少了hen多跨仓漏改。
以后要挂队列、worker,鉴权再想拆出去,也愿意顺着现成的包长枝,不想再养一套谁也不知道的新规矩。要Zuo AI 相关的增量也同理:Embedding、RAG、异步任务到底落在 libs/ai 还是单独 apps/worker,一开始就需要个说得过去的落点,不然半年后全是 import 魔法和临时脚本。Monorepo 不提供正确答案,但它逼你把这一坨归谁管迟早说清楚。
在这套习惯里待久了工作状态会从“我在维护好几个小项目”悄悄换成“我在推进同一个系统”。不是口号,是你真的少了hen多切仓库、对版本、猜依赖的上下文切换。以前挑框架会问写着爽不爽。现在会先想过两个月再来需求,我还Neng不Neng一眼kan出该动哪几块。NestJS + Monorepo 谈不上惊艳,只是让我觉得没那么容易失控。
我手里在跑的一个仓库用的也是同一套思路,只是 app 名叫 apps/backend 和 apps/frontend,后端在 src 下拆 apischematypes 等,根上还有 Turborepo 缓存和一份给助手kan的 AGENTS.md。Claude Code、Cursor 之类读这类说明时会有点用,再配合仓库里实打实的 Nest 目录,跑偏会少一些。
所以到了 2026 年,我反而geng多把 NestJS 和 Monorepo 当作默认选项,不是因为它们听起来高级,单纯是省事:目录大致怎么长、模块怎么切、前后端Neng不Neng共用同一份类型说明,至少有个大家dou认的底子。AI 跟着改文件的时候,不至于今天一套写法、明天换一套,你自己回kan也少猜谜。
选型我就问两件事,多文件改完会不会散,下个补丁你Neng不Neng猜到哪一层动。Nest 不是唯一答案,只是我默认懒得再赌。以前kan AI 的补丁,像是在考古这东西为何出现在此;现在geng多像是在核对这块业务说得圆不圆。这不是神话 AI,只是把本该机械的对齐成本压低了一层。
Ru果你对 AI 全栈开发、文档编辑器、前端工程化或者 React 源码相关内容感兴趣,欢迎添加我的微信 yunmz777 一起交流。觉得项目还不错的话,也欢迎给 DocFlow 点个 star ⭐。大家好 👋,我是 Moment,目前正在使用 Next.js、NestJS、LangChain 开发 DocFlow。这是一个面向 AI 场景的协同文档平台,集成了基于 Tiptap 的富文本编辑、NestJS 后端服务、实时协作与智Neng化工作流等核心模块。在这个项目的持续打磨过程中,我积累了不少实战经验,不只是 Tiptap 的深度定制、编辑器性Neng优化和协同方案设计,也包括前端工程化建设、React 源码理解以及复杂项目架构实践。
Zui后Monorepo 听上去像要把所有东西糊在一起,Nest 又像老派人Zuo的三层后端。我自己的用法其实hen土,源码和好改的契约放在一起,发布照样Ke以按 app 拆开。同一个 workspace 改 API 和页面共享类型和同一条 linttsconfig 脚本,少扯等你发包我先对齐版本的皮。以前在多个仓库里的流程,hen多变成同一仓库里自己 refactor。这大概就是为什么到了 2026 年,这套组合依然风头正劲的原因吧。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback