React 18项目中使用环境变量(适用于不同环境下的配置常量)

🎯 场景说明

假设你正在开发一个 React 应用,需要调用后端 API,而 API 的地址在不同的环境下是不一样的,比如:

​​开发环境(development)​​:http://localhost:8080/api

​​测试环境(staging)​​:https://staging.api.example.com/api

​​生产环境(production)​​:https://api.example.com/api

为了避免在代码中硬编码这些 URL,我们使用 ​​环境变量​​ 来管理它们,这样可以根据当前环境自动切换对应的配置。

✅ 一、环境变量基础规则(Create React App 项目)

如果你使用的是 ​​Vite​​ 创建的 React 项目,规则略有不同,我也会在最后补充说明。

1. 环境变量文件命名规范(CRA)

在 Create React App (CRA) 项目中,环境变量必须以 REACT_APP_开头,否则 React 无法在代码中访问它们。

可用的环境变量文件有:

文件名 用途 加载时机
.env 默认,所有环境共用 始终加载
.env.development 开发环境(npm start) 开发时加载
.env.production 生产环境(npm run build) 构建时加载
.env.test 测试环境(npm test) 测试时加载

⚠️ 注意:文件应该放在 ​​项目根目录(和 package.json 同级)​

二、项目文件结构示例

复制代码
my-react-app/
├── public/
├── src/
│   ├── App.js
│   └── ...
├── .env                <-- 所有环境默认加载(可选)
├── .env.development    <-- 开发环境专用
├── .env.production     <-- 生产环境专用
├── package.json
└── ...

🔧 三、创建环境变量文件

  1. .env.development(开发环境)

    .env.development

    REACT_APP_API_URL=http://localhost:8080/api
    REACT_APP_ENV=development

  2. .env.production(生产环境)

    .env.production

    REACT_APP_API_URL=https://api.example.com/api
    REACT_APP_ENV=production

    你可以根据需要添加更多变量,比如:
    REACT_APP_AUTH_DOMAIN
    REACT_APP_GOOGLE_MAPS_KEY
    等等
    🚨 所有自定义环境变量必须以 REACT_APP_开头!

🧠 四、React 代码中使用环境变量

示例:在 API 请求或配置中使用

复制代码
// src/utils/api.js

const apiUrl = process.env.REACT_APP_API_URL;
const env = process.env.REACT_APP_ENV;

console.log('当前环境:', env); // development / production
console.log('API Base URL:', apiUrl);

// 模拟一个 API 请求函数
export async function fetchUsers() {
  try {
    const response = await fetch(`${apiUrl}/users`);
    if (!response.ok) {
      throw new Error('网络请求失败');
    }
    const data = await response.json();
    return data;
  } catch (error) {
    console.error('获取用户失败:', error);
    throw error;
  }
}

在组件中使用:

复制代码
// src/App.js
import React, { useEffect, useState } from 'react';
import { fetchUsers } from './utils/api';

function App() {
  const [users, setUsers] = useState([]);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    async function loadData() {
      try {
        const data = await fetchUsers();
        setUsers(data);
      } catch (err) {
        console.error(err);
      } finally {
        setLoading(false);
      }
    }

    loadData();
  }, []);

  if (loading) return <div>加载中...</div>;

  return (
    <div>
      <h1>用户列表(当前环境:{process.env.REACT_APP_ENV})</h1>
      <ul>
        {users.map((user) => (
          <li key={user.id}>{user.name}</li>
        ))}
      </ul>
    </div>
  );
}

export default App;

▶️ 五、运行与构建命令

  1. 启动开发服务器(自动使用 .env.development)

    npm start

此时 React 会自动加载 .env.development中的变量,例如:

复制代码
REACT_APP_API_URL=http://localhost:8080/api
  1. 构建生产版本(自动使用 .env.production)

    npm run build

此时会使用 .env.production中的变量,例如:

复制代码
REACT_APP_API_URL=https://api.example.com/api

⚠️ 注意:npm run build生成的是静态文件,环境变量会被​​打包进去​​,运行时无法动态修改!

🧪 六、其他环境(如测试环境)

如果你有测试环境,可以创建一个 .env.test文件:

复制代码
# .env.test
REACT_APP_API_URL=https://test.api.example.com/api
REACT_APP_ENV=test

并在运行测试时确保使用该文件(通常测试框架如 Jest 会自动处理)。

🛠 七、Vite 项目中的环境变量(补充)

如果你没有使用 Create React App,而是使用 ​​Vite + React​​(比如通过 npm create vite@latest创建的项目),环境变量的规则稍有不同:

命名规则:

所有自定义环境变量需要以 ​​VITE_​​ 开头,而不是 REACT_APP_。

文件名:

  • .env
  • .env.development
  • .env.production
  • .env.test

代码中使用:

复制代码
const apiUrl = import.meta.env.VITE_API_URL;

而不是:

复制代码
// ❌ CRA 才用这个
process.env.REACT_APP_API_URL

示例(Vite + React):

复制代码
# .env.development
VITE_API_URL=http://localhost:8080/api
VITE_ENV=development

// src/api.js
const apiUrl = import.meta.env.VITE_API_URL;
console.log(apiUrl); // http://localhost:8080/api

✅ 总结:环境变量使用完整流程

步骤 操作内容
1️⃣ 在项目根目录创建 .env.development.env.production文件
2️⃣ 定义以 REACT_APP_开头的自定义变量(CRA)或 VITE_(Vite)
3️⃣ 在代码中通过 process.env.REACT_APP_XXX(CRA)或 import.meta.env.VITE_XXX(Vite)访问
4️⃣ 运行 npm start使用开发环境变量,npm run build使用生产环境变量
5️⃣ 可根据需要创建 .env.test或其它自定义环境配置

📌 最佳实践建议

  1. 不要将敏感信息(如私钥、密码)放入前端环境变量中,因为它们会被打包并暴露给客户端!
  2. 合理划分环境,比如 dev / staging / prod,分别管理对应 API 和功能开关。
  3. 使用 .env管理配置常量,而不是硬编码在代码中,便于维护和多环境部署。
  4. 团队协作时,将 .env.example提交到 Git,里面包含变量名但不含敏感值,提醒团队成员创建自己的 .env文件。
相关推荐
牛仔只喝牛奶12 小时前
多端跨端技术选型:小程序 + H5 + App 的两栈拆分落地
react native·react.js
wear工程师16 小时前
setState 到底是不是异步的?这题从 React 16 问到 18,标准答案早就变了
react.js·面试
wanghowie18 小时前
LangGraph4j 落地(二)— ReAct 多步工具与 trace 扩展
前端·react.js·前端框架
csj5019 小时前
前端基础之《React(11)—state声明式》
前端·react.js
张元清19 小时前
React useLocalStorage Hook:SSR 安全的持久化状态(2026)
javascript·react.js
析数塔20 小时前
2026前端框架深度解析:React Compiler、Angular Zoneless、Vue 3.5重写游戏规则
前端·vue.js·react.js
杖雍皓20 小时前
没有服务器如何构建现代 Web 应用:平台选型与组合策略
运维·服务器·前端·react.js·github·netlify·vercel
sun_weitao20 小时前
微前端框架之qiankun 怎么用?vue3+vite+qiankun 和 react + qiankun
前端·react.js·前端框架
名字还没想好☜2 天前
React useEffect 依赖数组踩坑:闭包陷阱与清理函数
前端·javascript·react.js·react·useeffect
我是大卫2 天前
【图】React源码解析-第四部分:事件与跨层传递
react.js·源码