vite 的 plugin 与 rollup 十分类似,都是一个对象,里面包含 name 属性,即插件的名称,以及各种生命周期 hooks。
rollup plugin 的所有 hooks 在 vite plugin 中都能兼容,并且 vite plugin 还有一些自己特有的 hooks,本篇文章会介绍一下这些 vite plugin 特有的 hooks。
当你需要对 vite 的配置进行一些处理时可以使用该 hook:
输出如下:
config hook 返回的对象会被 deep merge 到 vite config 中,也可以直接修改 config 对象,但是官方更推荐的是前者。
从命名上也能很容易知道它是用于获取最终解析完,会被 vite 消费的 config,一般使用场景是从该 hook 中记录一下最终的 config 到我们自己的插件内部:
进作用于开发阶段,用于对 dev server 进行配置:
用于对 vite 的入口 html 进行 transform,比如修改 html 内容、插入某些标签等等:
用于在热更新时进行自定义操作,比如:
这个 demo 中在热更新时可以在浏览器中通过自定义的 websocket 事件获取到服务器中的热更新模块信息。
执行顺序如下图所示:
开发 plugin 时可以通过 apply
属性指定该插件应用于什么场景,比如是开发阶段还是生产环境构建阶段:
实际上用户定义的插件的执行时机也是可以自定义的,首先来看下 vite plugin 的执行顺序(注意和前面的 plugin hook 执行顺序区分开,前面的是 hooks 的执行顺序而非各个插件的执行顺序):
因此我们可以指定插件的 enforce
属性去告诉 vite 这个插件要在哪个时机执行,不指定 enforce 参数时是普通插件,指定 enforce 值的话可以声明为 pre 或者 post。