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文件。
相关推荐
光影少年13 小时前
react的Context 跨层传值、优缺点、适用场景
前端·react.js·掘金·金石计划
JiaWen技术圈16 小时前
React Server Functions 深度解析
前端·react.js·前端框架
JiaWen技术圈17 小时前
React 19 并发渲染器:全面解析与实战指南
前端·react.js·前端框架
Ruihong19 小时前
VuReact v1.8.4 发布:Vue 迁移 React 编译器迎来稳定性大修,这些坑终于被填平了
前端·vue.js·react.js
从文处安19 小时前
「React Router v7 教程」从零到全栈,一篇搞定
前端·react.js
卸任19 小时前
打造基于 Milkdown 的所见即所得 Markdown 编辑器
前端·react.js·markdown
JiaWen技术圈19 小时前
React 19 Fiber 架构 深度解析
前端·react.js·架构
暗冰ཏོ19 小时前
《Vue + React + Java + PHP 项目部署到服务器完整指南》
java·服务器·vue.js·react.js·项目部署
JeariCk20 小时前
React Compiler 1.0 发布半年后的现状
react.js
. . . . .20 小时前
React Native
react native·react.js