知海

构建时插件共享变更

vite-main升级与迁移

::: tip 反馈
请在 Environment API 反馈讨论 中给我们反馈

参见 构建时共享插件

影响范围:Vite 插件作者 warning 未来默认变更
builder.sharedConfigBuild 首次在 v6.0 中引入。你可以将其设置为 true 来检查你的插件如何与共享配置配合工作。我们正在寻找关于在插件生态就绪后的未来主版本中更改默认值的反馈。
:::

动机

对齐开发与构建的插件管线。

迁移指南

为了能够跨环境共享插件,插件状态必须按当前环境进行键控。以下形式的插件将统计所有环境中被转换的模块数量。

js 复制代码
function CountTransformedModulesPlugin() {
  let transformedModules
  return {
    name: 'count-transformed-modules',
    buildStart() {
      transformedModules = 0
    },
    transform(id) {
      transformedModules++
    },
    buildEnd() {
      console.log(transformedModules)
    },
  }
}

如果我们想要分别统计每个环境中被转换的模块数量,则需要维护一个映射表:

ts 复制代码
function PerEnvironmentCountTransformedModulesPlugin() {
  const state = new Map<Environment, { count: number }>()
  return {
    name: 'count-transformed-modules',
    perEnvironmentStartEndDuringDev: true,
    buildStart() {
      state.set(this.environment, { count: 0 })
    },
    transform(id) {
      state.get(this.environment).count++
    },
    buildEnd() {
      console.log(this.environment.name, state.get(this.environment).count)
    },
  }
}

为了简化此模式,Vite 导出了一个 perEnvironmentState 辅助函数:

ts 复制代码
function PerEnvironmentCountTransformedModulesPlugin() {
  const state = perEnvironmentState<{ count: number }>(() => ({ count: 0 }))
  return {
    name: 'count-transformed-modules',
    perEnvironmentStartEndDuringDev: true,
    buildStart() {
      state(this).count = 0
    },
    transform(id) {
      state(this).count++
    },
    buildEnd() {
      console.log(this.environment.name, state(this).count)
    },
  }
}

帮助我们改进文档

发现翻译问题或内容错误?请告诉我们。