构建期间共享插件
反馈
请在 环境 API 反馈讨论 中给我们反馈。
请参阅 构建期间共享插件。
影响范围:Vite 插件作者
未来默认更改
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)
},
}
}
如果我们希望为每个环境分别计算转换的模块数量,则需要维护一个映射
js
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
帮助器
js
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)
}
}
}