前端工程依赖可视化

1,521 阅读3分钟

背景:

随着项目复杂度及工程量大起来,项目中优化就显得非常重要。这个过程中入要快速复用工程时,你会发现项目运行部起来,但不知是那种依赖报错,一时也很难检测,以下推荐几种常用的解决方式

依赖关系可视化:

第一种:

使用命令可以生成和控制输出的依赖关系图。对于追踪单个文件的依赖关系的场景,使用 VS Code 插件会更方便。

使用 VSCode 插件 Dependency Cruiser Extension

使用方式也很简单,安装插件后在文件右键菜单中点击「View Dependencies」即可看到基于该文件的依赖图。

第二种

安装Graphviz,仅提供win下的下载安装方式

blog.csdn.net/qq_42257666…

执行命令:

npx depcruise —-output-type dot src | dot -T svg > dependency-graph.svg

执行后会在根目录下得到一张 svg 格式的依赖关系图。

上方的核心命令是 depcruise src,表示对 src 下的文件进行依赖追踪。

其余参数用来控制输出格式:

—-output-type dot 表示输出格式为 dot,意味着使用 Graphviz 来输出。 dot -T svg > dependency-graph.svg 为 Graphviz 的命令行语法,表示输出名为 dependency-graph 的 svg 文件。

建议将该命令放在 package.json 的 npm 脚本中,还能配合 CI/CD 完成依赖图生成自动化。

其它参数

除了控制输出格式,我们还能通过一些参数对依赖图进行控制。 —-exclude:用于过滤掉图上不关心的依赖。 --include-only:与 --exclude 相反,只保留范围内的依赖。 -—do-not-follow:会过滤掉某个依赖的后续依赖。 —-max-depth:指定依赖树的深度。将依赖图的输出大小保持在可控范围内。 比如设置 --max-depth 1后生成的 preact 依赖图仅有一级依赖

依赖关系校验:

Github 仓库:github.com/sverweij/de…

dependency-cruiser 直译过来就是「依赖巡洋舰」,用于可视化校验模块之间的依赖关系。

它支持前端常用的 JavaScript,TypeScript 语言和 ESM,CommonJS 等模块规范。

在项目里通常与 ESLint 配套使用,一个用于代码检查,一个用于依赖检查。

可以像 ESLint 一样通过命令来校验依赖关系,而且支持自定义规则,比如「禁止循环依赖」,「禁止跨模块引用」等。

dependency-cruiser 也可以像 ESLint 一样自定义规则来对依赖关系进行校验。

安装

npm i dependency-cruiser -D

npx depcruise -—init

执行命令

npx depcruise src --config .dependency-cruiser.js

子依赖禁止再依赖其它模块

比如项目内基于浏览器的 cookie api 封装了一个 cookie 库。

cookie 库只依赖 cookie api,不依赖其它模块,可以配置一条规则来「强制它是一个叶子依赖」。

  {
      name: 'cookies-define', //规则名称
      severity: 'error', //严重等级
      comment: //禁止循环引用
      // from 和 to 描述规则的具体内容,from 表示「依赖方」,to 表示「被依赖方」
      from: { // 不填则表示所有引用
         path: '^src/lib/cookies',
     }, 
     to: { // 不能引用任何其它依赖
       // circular: true // 不允许成环
      }
    },

第三种 使用 depcheck 检测项目中不用的依赖包,或缺失包文件

安装
npm install -g depcheck

node.js >= 10
使用

在项目目录下直接执行命令 depcheck,或者 depcheck <你的项目目录>

注意:也可以创建一个 .depcheckrc 文件,然后直接配置

ignores: ["eslint", "babel-*", "@babel/*"]  skip-missing: true 
删除
npm uninstall <包名>

项目久了依赖太多,可以通过以上命令删除无用的包,为项目减负

总结

本文主要介绍了 dependency-cruiser 治理项目模块依赖关系的几种使用方式。

  1. 依赖关系可视化:使用命令可以生成和控制输出的依赖关系图。对于追踪单个文件的依赖关系的场景,使用 VS Code 插件会更方便。

  2. 依赖关系校验:可以像 ESLint 一样通过命令来校验依赖关系,而且支持自定义规则,比如「禁止循环依赖」,「禁止跨模块引用」等。

  3. 使用插件检查缺失依赖包

[1] Real world samples: github.com/sverweij/de…

[2] Dependency Cruiser Extension: marketplace.visualstudio.com/items?itemN…

[3]依赖验证规则 www.5axxw.com/wiki/conten…