跳到内容

this.environment 在 Hooks 中

反馈

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

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

影响范围:Vite 插件作者

未来废弃

this.environmentv6.0 中引入。options.ssr 的废弃计划在未来的一个主要版本中进行。届时我们将开始建议您将插件迁移到使用新 API。要识别您的用法,请在您的 Vite 配置中将 future.removePluginHookSsrArgument 设置为 "warn"

动机

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

迁移指南

对于现有插件的快速迁移,请在 resolveIdloadtransform 钩子中将 options.ssr 参数替换为 this.environment.config.consumer === 'server'

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.config.consumer === 'server'

      if (isSSR) {
        // SSR specific logic
      } else {
        // Client specific logic
      }
    },
  }
}

对于更健壮的长期实现,插件钩子应使用细粒度的环境选项来处理多个环境,而不是依赖于环境名称。

根据 MIT 许可证发布。(083ff36d)