跳至内容

this.environment in Hooks

反馈

请在 环境 API 反馈讨论 中向我们提供反馈

在 Vite 6 之前,只有两个环境可用:clientssrresolveIdloadtransform 中的单个 options.ssr 插件 Hook 参数允许插件作者在插件 Hook 中处理模块时区分这两个环境。在 Vite 6 中,Vite 应用程序可以根据需要定义任意数量的命名环境。我们在插件上下文中引入了 this.environment 来与 Hook 中当前模块的环境进行交互。

影响范围:Vite 插件作者

未来弃用

this.environmentv6.0 中引入。options.ssr 计划在 v7.0 中弃用。届时,我们将开始建议您将插件迁移到新的 API。要识别您的使用情况,请在您的 vite 配置文件中将 future.removePluginHookSsrArgument 设置为 "warn"

动机

this.environment 不仅允许插件 Hook 实现了解当前环境名称,还允许访问环境配置选项、模块图信息和转换管道(environment.configenvironment.moduleGraphenvironment.transformRequest())。在上下文中提供环境实例,允许插件作者避免依赖整个开发服务器(通常通过 configureServer Hook 在启动时缓存)。

迁移指南

对于现有的插件,要进行快速迁移,请在 resolveIdloadtransform Hook 中将 options.ssr 参数替换为 this.environment.name !== 'client'

ts
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 应该使用细粒度的环境选项处理 多个环境,而不是依赖环境名称。

在 MIT 许可证下发布。 (ccee3d7c)