头图

背景

作为一个后端开发者(24岁,专升本刚毕业),我一直在想:怎么做一个不烂大街的项目?

网上教程到处都是“电商系统”、“博客系统”、“待办事项”。我厌倦了那种写出来自己都不想用的东西。

所以我决定做一个真正能用到日常开发中的工具:依赖图分析器。


效果展示

先看最终成果(运行在我的项目上):

{BF96A7CE-8409-4E0A-90AB-934AFA3EECEB}.png

  • 源文件总数:186
  • 依赖总数:140(外部 97 + 内部 43)
  • 未使用依赖:2vue-countup-v2vue-particles
  • 分析耗时:1812ms

是不是很直观?尤其是未使用依赖这个功能,能帮我们清理项目里那些早就没用的包。


实现原理(核心干货,面试官最爱问)

1. 如何解析依赖?

我使用了 TypeScript Compiler API(也可以用 @babel/parser)。
核心步骤:

  • 遍历每个 .ts / .js / .vue 文件
  • 生成 AST(抽象语法树)
  • 提取所有 ImportDeclaration 和动态 import() 调用

2. 如何区分外部依赖和内部依赖?

  • 如果 import 路径以 ./ 开头 → 内部依赖
  • 否则 → 外部依赖(npm 包名)

3. 如何检测循环依赖?

把依赖关系看作有向图,用 DFS + 三色标记

  • 白色:未访问
  • 灰色:正在访问(如果在灰色节点再次遇到,说明有环)
  • 黑色:已安全访问完毕
// 伪代码示例
function dfs(node, colorMap, path) {
  if (colorMap[node] === 'gray') {
    console.log('发现循环依赖:', path);
    return;
  }
  // ...

痴情的白开水
1 声望0 粉丝