Vite配置插件时,为什么自定义钩子函数没有被触发?

欧阳彦鸽 阅读 17

在开发环境用Vite打包时,我按文档给自定义插件加了closeBundle钩子,但控制台就是没输出调试信息。配置文件里已经用export default导出了插件对象,也试过把钩子写成async形式,重启服务后还是没反应,这是哪里配置错了吗?


export default ({ config }) => {
  return {
    name: 'my-plugin',
    closeBundle() {
      console.log('🎉 钩子触发了!'); // 这行根本没执行
    }
  }
}

插件是直接写在vite.config.js的plugins数组里引入的,其他基础配置比如别名 alias 都正常。查了两天没头绪,是不是Vite4.x之后钩子机制有变化?

我来解答 赞 6 收藏
二维码
手机扫码查看
1 条解答
A. 一鸣
A. 一鸣 Lv1
你的插件写法基本没问题,但 closeBundle 钩子只在构建结束时触发,开发环境(vite serve)下是不会执行的。你用 vite 命令启动的是开发服务器,自然看不到输出。

想验证钩子生效,得用构建命令。试试:

vite build


构建完成后看控制台,应该就能看到“🎉 钩子触发了!”。

另外,插件导出方式可以优化成更标准的形式,避免解构 config 造成误解(Vite 插件函数参数不是配置对象):

export default function myPlugin() {
return {
name: 'my-plugin',
closeBundle() {
console.log('🎉 钩子触发了!');
}
}
}


然后在 vite.config.jsplugins 数组中引入它就行。

总结:不是钩子不触发,是你在 dev 模式下等一个 build 阶段的钩子,当然等不到。换 vite build 就能看到效果了。
点赞 4
2026-02-11 10:11