背景
作为一个后端开发者(24岁,专升本刚毕业),我一直在想:怎么做一个不烂大街的项目?
网上教程到处都是“电商系统”、“博客系统”、“待办事项”。我厌倦了那种写出来自己都不想用的东西。
所以我决定做一个真正能用到日常开发中的工具:依赖图分析器。
效果展示
先看最终成果(运行在我的项目上):
- 源文件总数:186
- 依赖总数:140(外部 97 + 内部 43)
- 未使用依赖:2(
vue-countup-v2、vue-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;
}
// ...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。