# 文档介绍

如果没有找到相应的缓存,Vite 将抓取你的源码,并自动寻找引入的依赖项(即 "bare import",表示期望从 node_modules 解析),并将这些依赖项作为预构建包的入口点。预构建通过 esbuild 执行,所以它通常非常快。

在服务器已经启动之后,如果遇到一个新的依赖关系导入,而这个依赖关系还没有在缓存中,Vite 将重新运行依赖构建进程并重新加载页面。

# 理解文档函意。

  1. vite 扫描时收集的构建依赖目录是从 node_modules 包中导入的模块。
  2. 通过 esbuild 进行构建, 同时收集构建依赖也是通过 esbuild 利用文件解析方式。

# 扫描器函数 scanImports

let deps: Record<string, string>, missing: Record<string, string>
if (!newDeps) {
  ;({ deps, missing } = await scanImports(config))
} else {
  deps = newDeps
  missing = {}
}

scanImports 是扫描器执行函数, 从这里正式开启扫描。

# depsmissing 变量

  1. deps 存储扫描后需要预构建的依赖, 在 node_modules 寻找到对应的构建文件入口。
  2. missing 存储扫描后的需要构建的依赖, 但是并没在 node_modules 寻找对应的构建文件入口,成为一个缺失的依赖。

# newDeps 参数理解

newDepsoptimizeDeps 构建入口方法传入的参数, 如果存在 newDeps 说明是在服务器启动后, 加载导入的模块时, 遇到需要构建依赖模块时, 此时这个依赖关系并没有在构建结果元信息中被找到。将执行加载资源时优化的执行逻辑后, 再次调用 optimizeDeps 传入收集后合并后的依赖模块 (最终的依赖关系 === 已知的依赖和新的依赖)

所以当没有 newDeps 时, 将进行依赖扫描, 得到 depsmissing

# 扫描流程图

尽请期待...