Vite配置插件时,为什么自定义钩子函数没有被触发?
在开发环境用Vite打包时,我按文档给自定义插件加了closeBundle钩子,但控制台就是没输出调试信息。配置文件里已经用export default导出了插件对象,也试过把钩子写成async形式,重启服务后还是没反应,这是哪里配置错了吗?
export default ({ config }) => {
return {
name: 'my-plugin',
closeBundle() {
console.log('🎉 钩子触发了!'); // 这行根本没执行
}
}
}
插件是直接写在vite.config.js的plugins数组里引入的,其他基础配置比如别名 alias 都正常。查了两天没头绪,是不是Vite4.x之后钩子机制有变化?
closeBundle钩子只在构建结束时触发,开发环境(vite serve)下是不会执行的。你用vite命令启动的是开发服务器,自然看不到输出。想验证钩子生效,得用构建命令。试试:
构建完成后看控制台,应该就能看到“🎉 钩子触发了!”。
另外,插件导出方式可以优化成更标准的形式,避免解构 config 造成误解(Vite 插件函数参数不是配置对象):
然后在
vite.config.js的plugins数组中引入它就行。总结:不是钩子不触发,是你在 dev 模式下等一个 build 阶段的钩子,当然等不到。换
vite build就能看到效果了。