钩子函数中的 this.environment
反馈
可以在 环境 API 讨论 中向我们提供反馈
在 Vite 6 版本之前,只有两个环境是可用的:client 和 ssr。在 resolveId、load 和 transform 中的 options.ssr 插件钩子参数,允许插件的作者在处理插件钩子中的模块时区分这两个环境。在 Vite 6 版本中,一个 Vite 应用可以根据需要定义任意数量的命名环境。我们在插件的上下文中引入了 this.environment,以便在钩子中与当前模块的环境进行交互。
影响范围:Vite 插件作者
即将废弃
this.environment 最初在 v6.0 版本中被引入。我们计划在未来的 major 版本中废弃 options.ssr。到那时,我们会开始建议你将你的插件迁移到新的 API。如果想识别你的使用情况,可以在你的 vite 配置文件中将 future.removePluginHookSsrArgument 设置为 "warn"。
动机
this.environment 不仅可以让插件钩子实现知道当前的环境名称,还可以让它访问到环境配置选项、模块图信息和转换管道(environment.config、environment.moduleGraph、environment.transformRequest())。在上下文中可以使用环境实例,这让插件的作者可以避免依赖整个开发服务器(通常是在通过 configureServer 钩子启动时进行缓存)。
迁移指南
对于现有的插件,如果想要快速迁移,可以在 resolveId、load 和 transform 钩子中,将 options.ssr 参数替换为 this.environment.config.consumer === 'server':
import { Plugin } from 'vite'
export function myPlugin(): Plugin {
return {
name: 'my-plugin',
resolveId(id, importer, options) {
const isSSR = options.ssr
const isSSR = this.environment.config.consumer === 'server'
if (isSSR) {
// SSR 特有逻辑
} else {
// 客户端特有逻辑
}
},
}
}对于更稳定、长期的实现,插件钩子应该处理 多个环境,并使用细粒度的环境选项,而不是依赖于环境的名称。