# vite原理:插件机制
# 为什么要理解插件机制
Vite 的扩展能力几乎都在插件上。
理解插件机制,基本就理解了 Vite 如何“改造源码、接管构建、扩展能力”。
# Vite 插件的两层来源
- Vite 自己的插件体系(开发服务器相关钩子)
- Rollup 插件体系(构建阶段钩子)
Vite 对 Rollup 插件高度兼容,这就是它生态扩展快的核心原因之一。
# 插件执行的大致时机
config:读取并修改用户配置configResolved:最终配置确定后触发configureServer:拿到 dev server,做中间件扩展transform:转换模块源码(最常用)handleHotUpdate:自定义 HMR 行为
# 一个最小插件示例
function demoPlugin() {
return {
name: "demo-plugin",
transform(code, id) {
if (id.endsWith(".js")) {
return code.replace("__APP_NAME__", "my-vite-app");
}
return code;
},
};
}
export default demoPlugin;
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
vite.config.js
import { defineConfig } from "vite";
import demoPlugin from "./plugins/demo-plugin";
export default defineConfig({
plugins: [demoPlugin()],
});
1
2
3
4
5
6
2
3
4
5
6
# 插件顺序与 enforce
可以通过 enforce 控制执行顺序:
enforce: "pre":前置- 默认:中间
enforce: "post":后置
当多个插件都改同一份源码时,顺序非常关键。
# 生产与开发的差异
有些钩子只在开发阶段有意义(例如 configureServer),
有些钩子在 build 阶段影响更大(例如 Rollup output 相关处理)。
# 小结
Vite 插件机制本质是「统一的扩展流水线」:
你可以在配置、开发服务器、模块转换、构建输出多个节点介入,这也是 Vite 工程化能力的根基。