es modules 依赖可视化通过静态解析 import 语句构建模块图,使用 esbuild/acorn/swc 提取路径与导入方式生成映射表,再用 graphviz/vis.js 等渲染;需处理条件导出、动态 import、类型导入及循环依赖;推荐 madge、esbuild --analyze 等开箱即用工具。

ES Modules 的依赖关系可视化,核心是解析 JavaScript 源码中的 import 语句,构建模块图(Module Graph),再用图形工具渲染。不依赖运行时,纯静态分析即可完成。
提取 import 声明,生成模块关系数据
使用像 esbuild、Acorn 或 SWC 这类解析器读取所有 .js 文件,遍历 AST 中的 ImportDeclaration 节点,提取:
- 当前模块路径(绝对或相对)
- 被导入模块的路径(需做路径解析:处理
./、../、包名、条件导出等) - 导入方式(命名导入、默认导入、namespace 导入)
最终输出一个结构如 { "src/index.js": ["src/utils.js", "lodash"] } 的映射表,或更标准的 JSON-LD / DOT 格式图数据。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
用图可视化工具渲染依赖图
拿到模块关系后,可选轻量级方案快速出图:
-
Graphviz + DOT:将关系转为
.dot文件,用dot -Tpng graph.dot -o deps.png一键生成静态图 - Vis.js / D3.js / Cytoscape.js:嵌入网页,支持缩放、搜索、高亮某模块的上下游依赖
- VS Code 插件:如 Import Cost 或 Project Statistics 可在编辑器内显示简要依赖链
处理真实项目中的常见复杂情况
实际工程中需额外处理几类问题才能让图准确可用:
-
条件导出(exports field):检查
package.json中的"exports",按环境(import/require)、平台(browser/node)匹配真实入口 - 动态 import():可选择性包含(作为虚线边)或忽略——它属于运行时分支,静态图中通常标为“可能依赖”
-
TypeScript 类型导入:过滤掉仅用于类型声明的
import type,它们不参与运行时依赖 -
循环依赖检测:在构建图时用 DFS 记录路径,自动标出环并提示(如
A → B → A)
开箱即用的工具推荐
不想从头写解析逻辑?这些成熟工具可直接跑起来:
- depcheck:侧重未使用依赖,但能输出依赖列表
- madge:专为依赖图设计,支持 CLI 输出 PNG/SVG/JSON,内置循环检测
-
esbuild --analyze(v0.19+):加
--analyze参数会生成 HTML 报告,含交互式依赖图和体积分析 - rollup-plugin-visualizer:配合 Rollup 构建流程,在产物阶段生成带依赖与体积的可视化面板
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










