@quiteer/vite-plugins · envTypesPlugin
概述
扫描项目根目录下的 .env* 文件,自动生成 env.d.ts,为 import.meta.env 提供类型提示与补全。
安装与使用
ts
import { defineConfig } from 'vite'
import { envTypesPlugin } from '@quiteer/vite-plugins'
export default defineConfig({
plugins: [envTypesPlugin()]
})选项
root?: string:项目根目录,默认 Viteconfig.rootenvFilePatterns?: string[]:默认['.env', '.env.*', '.env.*.local', '.env.local']includePrefixes?: string[]:默认读取 ViteenvPrefix或['VITE_']outputFile?: string:输出路径,默认<root>/env.d.tsliteralUnions?: boolean:是否生成“联合字面量类型”,默认true。开启后会跨所有匹配的.env*文件聚合每个键的值并去重,输出更精确的类型;若无可聚合值则回退为string。
示例
ts
envTypesPlugin({
includePrefixes: ['VITE_', 'APP_'],
outputFile: 'types/env.d.ts',
literalUnions: true
})行为说明
- dev 与 build 阶段均会生成;dev 下监听
.env*变更自动更新。 - 仅保留前缀匹配的变量,避免将私密变量暴露到
import.meta.env。 - 联合字面量类型收集规则:
- 从所有匹配的
.env*文件中读取同名键的值,去重并排序;空值与空字符串会被忽略。 - 若某键在所有文件中均未赋值或仅出现空值,则生成
string类型。 - 生成的类型不进行布尔/数字推断,避免运行时隐式转换导致的类型不一致。
- 从所有匹配的
示例输出(片段)
ts
// env.d.ts
interface ImportMetaEnv {
readonly VITE_DESC: '通用环境变量' | '开发环境变量' | '生产环境变量'
readonly VITE_API_URL: '/api' | '/v1' | '/v2' | string // 示例:当值较多或存在非枚举值时,可能包含 string
}
interface ImportMeta { readonly env: ImportMetaEnv }关闭联合字面量类型
- 如需保持所有键为
string,设置literalUnions: false。