源码依赖
真实依赖树
真实(源码/包)依赖树代表项目运行时真正依赖的(源码/包),最能反应项目真实情况的结构。
源码不准确:在代码中声明import { get } from "ladash"
,如果没有使用get,则会被treeShaking掉,或者React框架会在每一个jsx
文件上方自动加入import React from "react"
,这些情况都会导致声明和真实依赖不准确的情况
包不准确:在 package.json
中声明了 "chalk": "^4.1.2"
,其中 ^
表示兼容版本,具体兼容哪些版本取决于语义化版本规则。以 ^4.1.2
为例,表示兼容 >=4.1.2 <5.0.0
的所有版本,因此实际运行时可能安装的是 4.1.5
、4.5.0
等符合范围的最新版本。
函数粒度
当一个文件有多个导出时,DepSpy会通过Git改动,精准判断哪些导出收到了影响,不会简单的认为一个文件改动,所有导出都收到影响,收束了影响面,极大的降低了开发者Review代码的心智负担。
双视角
一共有两种情况会影响文件,两种情况衍生出两种分析改动的视角
影响源(正向)
文件本身源码发生了改动,专注于改动文件本身,其子节点是导入了该改动文件的依赖文件,方便我们快速锁定该文件的影响面。
影响面(反向)
文件本身源码没有改动,但是导入的依赖发生了改动,专注于导入的依赖发生了改动的文件,其子节点就是该文件导入的变动文件,方便我们快速锁定该文件的影响源。