开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第19天,点击查看活动详情
vite插件的hooks
1. vite 独有的钩子
enforce:值可以是pre或post,pre会较于post先执行;apply:值可以是build或serve亦可以是一个函数,指明它们仅在build或serve模式时调用;config(config, env):可以在 vite 被解析之前修改 vite 的相关配置。钩子接收原始用户配置 config 和一个描述配置环境的变量env;configResolved(resolvedConfig):在解析 vite 配置后调用。使用这个钩子读取和存储最终解析的配置。当插件需要根据运行的命令做一些不同的事情时,它很有用。configureServer(server):主要用来配置开发服务器,为 dev-server (connect 应用程序) 添加自定义的中间件;transformIndexHtml(html):转换 index.html 的专用钩子。钩子接收当前的 HTML 字符串和转换上下文;handleHotUpdate(ctx):执行自定义HMR更新,可以通过ws往客户端发送自定义的事件;
2. vite 与 rollup 的通用钩子之构建阶段
options(options):在服务器启动时被调用:获取、操纵Rollup选项,严格意义上来讲,它执行于属于构建阶段之前;buildStart(options):在每次开始构建时调用;resolveId(source, importer, options):在每个传入模块请求时被调用,创建自定义确认函数,可以用来定位第三方依赖;load(id):在每个传入模块请求时被调用,可以自定义加载器,可用来返回自定义的内容;transform(code, id):在每个传入模块请求时被调用,主要是用来转换单个模块;buildEnd():在构建阶段结束后被调用,此处构建结束只是代表所有模块转义完成;
3. vite 与 rollup 的通用钩子之输出阶段
outputOptions(options):接受输出参数;renderStart(outputOptions, inputOptions):每次 bundle.generate 和 bundle.write 调用时都会被触发;augmentChunkHash(chunkInfo):用来给 chunk 增加 hash;renderChunk(code, chunk, options):转译单个的chunk时触发。rollup 输出每一个chunk文件的时候都会调用;generateBundle(options, bundle, isWrite):在调用 bundle.write 之前立即触发这个 hook;writeBundle(options, bundle):在调用 bundle.write后,所有的chunk都写入文件后,最后会调用一次 writeBundle;closeBundle():在服务器关闭时被调用
2. 插件的执行顺序
- 别名处理Alias
- 用户插件设置
enforce: 'pre' - vite 核心插件
- 用户插件未设置
enforce - vite 构建插件
- 用户插件设置
enforce: 'post' - vite 构建后置插件(minify, manifest, reporting)