# 文档介绍
如果没有找到相应的缓存,Vite 将抓取你的源码,并自动寻找引入的依赖项(即 "bare import",表示期望从 node_modules 解析),并将这些依赖项作为预构建包的入口点。预构建通过 esbuild 执行,所以它通常非常快。
在服务器已经启动之后,如果遇到一个新的依赖关系导入,而这个依赖关系还没有在缓存中,Vite 将重新运行依赖构建进程并重新加载页面。
# 理解文档函意。
- vite 扫描时收集的构建依赖目录是从 node_modules 包中导入的模块。
- 通过 esbuild 进行构建, 同时收集构建依赖也是通过 esbuild 利用文件解析方式。
# 扫描器函数 scanImports
let deps: Record<string, string>, missing: Record<string, string>
if (!newDeps) {
;({ deps, missing } = await scanImports(config))
} else {
deps = newDeps
missing = {}
}
scanImports 是扫描器执行函数, 从这里正式开启扫描。
# deps、 missing 变量
deps存储扫描后需要预构建的依赖, 在node_modules寻找到对应的构建文件入口。missing存储扫描后的需要构建的依赖, 但是并没在node_modules寻找对应的构建文件入口,成为一个缺失的依赖。
# newDeps 参数理解
newDeps 是 optimizeDeps 构建入口方法传入的参数, 如果存在 newDeps 说明是在服务器启动后, 加载导入的模块时, 遇到需要构建依赖模块时, 此时这个依赖关系并没有在构建结果元信息中被找到。将执行加载资源时优化的执行逻辑后, 再次调用 optimizeDeps 传入收集后合并后的依赖模块 (最终的依赖关系 === 已知的依赖和新的依赖)。
所以当没有 newDeps 时, 将进行依赖扫描, 得到 deps 和 missing。
# 扫描流程图
尽请期待...