在 Vite 中,插件的执行顺序取决于以下几个因素:
- 插件的
enforce
选项:pre
:优先执行(在 Vite 内部插件之前)。post
:最后执行(在 Vite 内部插件之后)。- 默认:不指定
enforce
的插件按照插件注册顺序执行。
- 插件的类型:
- Vite 插件可以处理多个阶段,例如
config
,configResolved
,buildStart
,transform
,generateBundle
等,每个阶段的执行顺序可能有所不同。
- Vite 插件可以处理多个阶段,例如
- 插件注册顺序:
- 在
vite.config.js
的plugins
数组中,插件的顺序会影响它们的执行顺序(除非enforce
影响了它们的优先级)。
- 在
如何查看插件的执行顺序
你可以通过以下方法查看 Vite 插件的执行顺序:
方法 1:使用 configResolved
在 vite.config.js
中添加一个插件,监听 configResolved
钩子,输出插件列表:
import { defineConfig } from 'vite';
export default defineConfig({
plugins: [
{
name: 'inspect-plugins',
enforce: 'pre', // 确保这个插件最早执行
configResolved(config) {
console.log(
config.plugins.map((p) => ({
name: p.name,
enforce: p.enforce || 'normal'
}))
);
}
}
]
});
运行 vite
时,你会在控制台看到插件的执行顺序。
方法 2:使用 transform
钩子
如果你想查看 transform
钩子的执行顺序,可以在插件中打印日志:
export default defineConfig({
plugins: [
{
name: 'log-transform',
transform(code, id) {
console.log(\`[log-transform] Processing: ${id}\`);
return null;
}
}
]
});
运行后,在终端中查看不同插件的 transform
触发顺序。
方法 3:使用 debug
模式
你可以运行 Vite 时加上 DEBUG
变量:
DEBUG=vite:* vite
或者在 package.json
里修改 scripts
:
"scripts": {
"dev": "DEBUG=vite:* vite"
}
这样可以看到插件的详细执行日志,包括 config
, transform
等钩子。
这些方法可以帮助你分析插件的执行顺序,并调整 enforce
以控制它们的优先级。