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