Skip to content

envGuard

在 Vite 构建前校验环境变量的存在性和合法性,支持类型检查、范围验证、自定义规则和运行时守卫。

导入

typescript
import { envGuard } from '@meng-xi/vite-plugin'
// 或子模块导入
import { envGuard } from '@meng-xi/vite-plugin/plugins/guard/env-guard'

快速开始

typescript
import { defineConfig } from 'vite'
import { envGuard } from '@meng-xi/vite-plugin'

export default defineConfig({
  plugins: [
    envGuard({
      required: {
        VITE_API_URL: { type: 'url', required: true },
        VITE_APP_TITLE: { type: 'string', minLength: 1, maxLength: 50 }
      },
      failAction: 'error'
    })
  ]
})

配置选项

选项类型默认值说明
requiredRecord<string, EnvFieldRule>{}环境变量校验规则映射
failAction'error' | 'warn' | 'ignore''error'校验失败时的处理动作
runtimeGuardbooleanfalse是否注入运行时守卫代码
generateTemplatebooleantrue是否自动生成 .env 模板文件

继承 BasePluginOptionsenabledverboseerrorStrategy

高级选项

选项类型默认值说明
templateOutputstring'.env.template'.env 模板文件的输出路径
runtimeGlobalNamestring'__ENV_GUARD__'运行时守卫的全局变量名
runtimeGuardMode'console' | 'throw' | 'overlay''console'运行时守卫的行为模式
envFilesstring[]['.env', '.env.local', '.env.production', '.env.development']需要加载的 .env 文件路径
autoLoadEnvbooleantrue是否自动加载 .env 文件
reportOutputstring | falsefalse校验报告输出路径
validateBeforeBuildbooleantrue是否在构建前执行校验
showSummarybooleantrue是否输出校验摘要日志

EnvFieldRule

每个环境变量的校验规则配置。

属性类型说明
type'string' | 'number' | 'url' | 'boolean' | 'enum' | 'json' | 'semver' | 'path'值类型校验
requiredboolean是否必需
defaultstring缺省默认值
messagestring校验失败时的自定义提示信息
patternRegExp正则匹配校验
validator(value: string) => boolean | string自定义校验函数,返回字符串表示校验失败提示
minValuenumber最小值(number 类型)
maxValuenumber最大值(number 类型)
minLengthnumber最小长度(string 类型)
maxLengthnumber最大长度(string 类型)
enumValuesstring[]允许的枚举值列表(enum 类型)

failAction

校验失败时的处理动作:

说明
error抛出错误,中断构建流程
warn输出警告日志,继续构建
ignore静默忽略,不输出任何信息

runtimeGuardMode

运行时守卫的行为模式:

说明
console在浏览器控制台输出警告信息
throw抛出运行时错误,阻止应用启动
overlay在页面顶部显示警告横幅

类型导出

EnvGuardResult

校验结果汇总对象。

属性类型说明
timestampstring校验时间戳(ISO 格式)
totalnumber校验的环境变量总数
passednumber校验通过的变量数量
missingnumber缺失的必需变量数量
invalidnumber校验失败的变量数量
resultsEnvValidationResult[]所有变量的详细校验结果列表
allPassedboolean是否所有变量均校验通过

示例

基础类型校验

typescript
envGuard({
  required: {
    VITE_API_BASE_URL: {
      type: 'url',
      required: true,
      message: 'API 基础地址必须为合法 URL'
    },
    VITE_APP_TITLE: {
      type: 'string',
      required: true,
      minLength: 1,
      maxLength: 50
    }
  }
})

数值范围与枚举校验

typescript
envGuard({
  required: {
    VITE_API_TIMEOUT: {
      type: 'number',
      minValue: 1000,
      maxValue: 60000,
      message: 'API 超时时间必须在 1000-60000ms 之间'
    },
    VITE_LOG_LEVEL: {
      type: 'enum',
      enumValues: ['debug', 'info', 'warn', 'error'],
      default: 'info'
    }
  }
})

启用运行时守卫

typescript
envGuard({
  required: {
    VITE_API_URL: { type: 'url', required: true }
  },
  runtimeGuard: true,
  runtimeGuardMode: 'console'
})

生成 .env 模板和校验报告

typescript
envGuard({
  required: {
    VITE_API_URL: { type: 'url', required: true },
    VITE_APP_TITLE: { type: 'string', required: true }
  },
  generateTemplate: true,
  templateOutput: '.env.example',
  reportOutput: 'env-guard-report.json'
})

仅警告不中断构建

typescript
envGuard({
  required: {
    VITE_ENABLE_ANALYTICS: { type: 'boolean', default: 'false' }
  },
  failAction: 'warn'
})

注意事项

  • 校验在 configResolved 钩子中执行,确保在构建开始前完成
  • autoLoadEnv 默认仅加载以 VITE_ 开头的变量(遵循 Vite 约定)
  • 运行时守卫代码通过 transformIndexHtml 钩子注入到 </head> 标签前
  • generateTemplate 会根据 required 配置自动生成带注释的 .env 模板文件

Released under the MIT License.