You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vite配置读取环境变量失效:多环境HTML入口不生效

问题排查与解决

1. 直接用Vite传入的mode参数做判断

你代码里用env.MODE == "staging"来分支,除非你在.env.staging里显式写了MODE=staging,否则env.MODE大概率是undefined,导致判断失效。直接用配置函数参数里的mode就行——这是Vite命令行传入的真实模式值:

export default defineConfig(({ command, mode, ssrBuild }) => {
  const env = loadEnv(mode, process.cwd(), '');
  return {
    base: env.BASE_PATH,
    plugins: [react()],
    build: {
      rollupOptions: {
        input: {
          main: mode === "staging" ? resolve(__dirname, 'staging.html') : resolve(__dirname, 'index.html')
        }
      }
    },
  }
})

2. 确认环境变量文件配置正确

  • 项目根目录得有.env.staging文件,里面必须写清楚BASE_PATH,比如:
    BASE_PATH=/staging/
    
  • 文件名必须严格对应模式(.env.${mode}),别写错字。

3. 别忘了导入resolve方法

代码里用了resolve(__dirname, ...),必须在配置文件顶部导入path模块的resolve:

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import { resolve } from 'path'; // 这行不能少

没导入的话resolve是undefined,生成的路径无效,Vite会自动 fallback 到默认的index.html。

4. 加日志验证配置是否生效

在配置文件里加两行日志,跑命令时看控制台输出,确认模式和环境变量是否正确加载:

export default defineConfig(({ command, mode, ssrBuild }) => {
  console.log('当前运行模式:', mode);
  const env = loadEnv(mode, process.cwd(), '');
  console.log('加载的BASE_PATH:', env.BASE_PATH);
  // ... 其他配置
})

执行tsc && vite build --mode staging后,要是控制台显示当前运行模式: staging且BASE_PATH是你设置的值,就说明前面的配置没问题;要是不对,就检查命令有没有执行错、文件路径是否正确。

5. 排查是否有其他配置冲突

如果项目里有vite.config.staging.ts这类模式专属配置文件,会覆盖当前的vite.config.ts,得确保没有这类文件干扰。

内容的提问来源于stack exchange,提问作者Danyx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 05:40:04