React@18+Vite项目配置env文件

React+Vite配置接口URL的env文件要符合以下规则:

1. 文件位置

确保 .env 文件放在项目根目录

复制代码
your-vite-project/
├── node_modules/
├── public/
├── src/
├── .env           # ✅ 正确位置
├── .env.development
├── .env.production
├── index.html
├── package.json
├── vite.config.js
└── README.md

2. 环境文件类型

Vite 支持多个环境文件:(文件名必须是这样的)

复制代码
.env                # 所有环境通用
.env.local          # 本地覆盖(不提交到git)
.env.development    # 开发环境 (如果文件名是 .env.develop 就不行)
.env.production     # 生产环境
.env.test          # 测试环境

3. Vite 环境变量命名规则

Vite 使用 VITE_ 作为自定义环境变量的前缀:

复制代码
# .env 文件
VITE_API_URL=http://localhost:3000/api
VITE_API_TIMEOUT=5000

4. 正确的访问方式

Vite 通过 import.meta.env 访问环境变量:

复制代码
// 在组件中
console.log(import.meta.env.VITE_API_URL); // http://localhost:3000/api
console.log(import.meta.env.VITE_API_TIMEOUT); // 5000

// 使用变量
const apiUrl = import.meta.env.VITE_API_URL;
fetch(`${apiUrl}/users`)

5. 在 Vite 配置中使用

复制代码
// vite.config.js
import { defineConfig, loadEnv } from 'vite'
import react from '@vitejs/plugin-react'

export default defineConfig(({ command, mode }) => {
  // 加载环境变量
  const env = loadEnv(mode, process.cwd(), '')
  
  console.log('当前模式:', mode)
  console.log('API URL:', env.VITE_API_URL)
  
  return {
    plugins: [react()],
    server: {
      port: env.VITE_PORT || 3000,
      proxy: {
        '/api': {
          target: env.VITE_API_URL,
          changeOrigin: true
        }
      }
    },
    define: {
      // 可以在这里定义全局常量
      __APP_VERSION__: JSON.stringify(env.npm_package_version)
    }
  }
})

6. 不同环境的配置文件

复制代码
# .env.development
VITE_API_URL=http://localhost:3000/api
VITE_ENABLE_DEBUG=true

# .env.production
VITE_API_URL=https://api.example.com
VITE_ENABLE_DEBUG=false

# .env.test
VITE_API_URL=http://test-api.example.com
VITE_ENABLE_DEBUG=true

注:修改了配置文件后要 重启项目

相关推荐
钛态6 小时前
Vite 中的 CSS 工程化:从 CSS Modules 到 UnoCSS 的渐进式迁移
前端·vue·react·web
Csvn8 小时前
原型链、this 与闭包内存:三座深水区一次打通(含内存泄漏排查实战)
前端·javascript
葡萄城技术团队8 小时前
如何通过 JSON 数据源 / Web API 快速构建轻量级报表(Report)?
前端·json·原型模式
浪兎兎8 小时前
【Java Web】Servlet + JSP 笔记
java·前端·servlet
Patrick_Wilson9 小时前
iOS Safari Clipboard API 权限弹窗问题
前端·ios·safari
OpenTiny社区10 小时前
Naive UI × GenUI SDK:自定义物料库搭建实战
前端·ai编程
kyriewen10 小时前
我拿 4 个真实前端任务试了 GLM-5.3 Flash:代码一遍跑通,账单 4 分钱
前端·程序员·ai编程
IT_陈寒10 小时前
Vue的响应式更新有时候真的不听话
前端·人工智能·后端
风骏时光牛马10 小时前
AI编程常见问题梳理与要点解析
前端
前端snow10 小时前
ai agent -- LCEL 汇总
前端