跳到主要内容
CNode

做了个 NestJS 静态分析工具 nestjs-doctor,一行命令给项目打分

分享
Ffranciscuo发布于 20 天前最后回复 3 天前
38820

写 NestJS 的时候,用 Copilot / Cursor / Claude Code 生成的代码经常有几类框架层面的错:模块循环依赖、Controller 上忘了加 Guard、Controller 里直接调 ORM、注册了但没人用的 provider。ESLint 的 Nest 插件基本不查这些,Nest Devtools 得把应用跑起来才能看。

所以我做了 nestjs-doctor,一个开源(MIT)的 NestJS 静态分析工具,直接读源码:

npx nestjs-doctor@latest .

不启动应用,不调 LLM,代码不上传。扫完给一个 0 到 100 的分,每条问题带文件和行号,同一个 commit 在本地和 CI 得分一致。

加 --report 会生成一个 HTML 报告:

  • 模块依赖图,循环依赖会高亮
  • 每个 HTTP 接口的调用链,从 Controller 到 Service 再到 Repository,一眼看到哪个接口直接碰了数据库
  • Prisma / TypeORM / Drizzle / MikroORM 的 ER 图,从实体代码里读出来
  • 在 main.ts 加几行、真实启动一次,再加 --timings <path>,多一页启动耗时,能看到哪个 provider 拖慢了启动

内置规则分五类:安全、正确性、架构、性能、数据库 schema。团队自己的约定可以写成自定义规则,一个 ts-morph 文件放进 customRulesDir 就能加载,比如"Controller 里不许直接用 Repository"。

也能跑在 pre-commit、GitHub Action(只评论 PR 新引入的问题)和 VS Code 里,支持 monorepo。国内走 npmmirror 也行,版本是同步的。

公开项目今天的分:twentyhq/twenty 99,immich 97,nocodb 95。

仓库:https://github.com/RoloBits/nestjs-doctor

文档(英文):https://www.nestjs.doctor/docs?from=cnode

我是作者,欢迎提 issue,尤其想知道国内团队常见的 Nest 项目结构里有没有规则没覆盖到的。

查看回复

回复 (2)

N
nicolanathaniei#23 天前

可以

C
cscsearching#15 天前

不启动应用就能扫循环依赖和 Controller 直接碰 ORM,比把服务跑起来再看 Devtools 轻便多了。自定义规则用一个文件放进目录就能加载,对团队约定很实用。循环依赖是按模块的 import 图来检测的吗?

参与回复

登录后即可参与回复。登录