Vite 源码解读系列(图文结合) —— 构建篇
vite build
在运行 vite build 命令时,内部调用了 doBuild 方法,该方法最终使用 rollup 来进行应用构建。
resolveConfig
和本地开发服务类似,doBuild 第一步先进行了配置信息的收集。在这一步中,resolveConfig 方法做了这几件事情:
- 处理插件执行顺序
- 合并插件配置
- 处理 alias
- 读取环境变量配置
- 导出配置
最终将配置导出后,用于接下来的构建操作,下面是导出的配置详情,感兴趣的同学可以自己打断点查看。(如下图)

接下来,是对一些变量的定义,以及输出当前 vite 版本。(如下图)
| 配置项 | 说明 |
|---|---|
config.build | vite 的构建选项 |
input | 项目入口文件,默认是项目根目录下的 index.html |
outDir | 构建产物的输出目录 |
ssr | 生成面向 SSR 的构建 |
libOptions/lib | 构建为库时才需要 |
整合插件
然后,vite 整合了项目配置的插件和 vite 自带的插件,用于后续 rollup 的编译工作。(如下图)

生成 rollup 配置
接下来,vite 将用户传入的 rollup 选项配置与默认配置进行合并,合并后构建了一个 rollOptions,提供给 rollup 打包使用。(如下图)
接下来,vite 配置了输出配置,主要分为三类 ssr、库模式、普通应用模式。(如下)
接下来,
vite 内部处理了 watch 属性,提供了构建时的监听属性支持。

编译产物
最后,vite 使用 rollup 编译文件,然后将这些文件输出到指定的构建产物目录中。(如下图)


// config:
最后,将这些 bundle 合并输出后,就生成了构建后的产物,可以使用 vite preview 来进行预览查看效果。

小结
到这里,vite build 的源码部分就解析完了,这部分代码要比 vite dev 简单很多。
我们还是画一个简单的流程图来总结一下吧。(如下图)

vite 源码解读系列,我们还剩下贯穿全文的插件(plugin)体系还没有进行解析,而 rollup 也是通过调用插件 plugin 完成的编译。