当前位置: 首页 > java >正文

【大前端】React配置配置 开发(development)、生产(production)、测试(test)环境

在 React 项目中配置 开发(development)、生产(production)、测试(test)环境,一般有两种常见方案:

  1. 使用环境变量(推荐,React 官方支持)
  2. 使用多配置文件(如 webpack/vite 配置区分)

梳理一份完整的实践方案 👇


1. 使用 .env 环境变量文件(推荐)

React(使用 Create React App 或 Vite)天然支持环境变量文件。

(1)创建环境变量文件

在项目根目录下新建以下文件:

.env.development   # 开发环境
.env.production    # 生产环境
.env.test          # 测试环境

(2)环境变量命名规范

React 要求自定义环境变量必须以 REACT_APP_ 开头,例如:

# .env.development
REACT_APP_API_URL=http://localhost:3000/api
REACT_APP_DEBUG=true# .env.production
REACT_APP_API_URL=https://api.example.com
REACT_APP_DEBUG=false# .env.test
REACT_APP_API_URL=http://test.api.example.com
REACT_APP_DEBUG=true

(3)在代码中使用

console.log(process.env.REACT_APP_API_URL);
console.log(process.env.REACT_APP_DEBUG);

(4)自动区分环境

  • npm start → 加载 .env.development
  • npm run build → 加载 .env.production
  • npm test → 加载 .env.test

如果你用 Vite,规则类似,只是必须以 VITE_ 开头:

VITE_API_URL=https://api.example.com

2. 使用 webpack/vite 配置文件区分(高级方式)

(1)webpack 方式

webpack.config.js 中使用 DefinePlugin 注入环境变量:

const webpack = require('webpack');module.exports = (env) => ({plugins: [new webpack.DefinePlugin({'process.env.API_URL': JSON.stringify(env.API_URL),}),],
});

运行时指定环境:

webpack --env API_URL=https://api.example.com

(2)Vite 方式

vite.config.js 中使用 define

import { defineConfig } from 'vite';export default defineConfig({define: {__API_URL__: JSON.stringify(process.env.VITE_API_URL),},
});

在代码中直接使用:

console.log(__API_URL__);

3. 结合配置文件方式(适合大型项目)

如果环境变量太多,可以抽象成配置文件:

📂 src/config/index.js

const env = process.env.NODE_ENV; // development | production | testconst configs = {development: {apiBaseUrl: process.env.REACT_APP_API_URL,debug: true,},production: {apiBaseUrl: process.env.REACT_APP_API_URL,debug: false,},test: {apiBaseUrl: process.env.REACT_APP_API_URL,debug: true,},
};export default configs[env];

使用时:

import config from './config';fetch(`${config.apiBaseUrl}/users`).then(res => res.json()).then(data => console.log(data));

总结

  • 小型项目:用 .env.* 文件就够了,官方推荐。
  • 中大型项目.env.* + 配置文件组合,管理更清晰。
  • 自定义构建工具:用 webpack/vite 的 DefinePlugin/define 来注入。

写一个 React 项目完整 demo,里面包含

  1. 环境变量配置.env.development / .env.production / .env.test
  2. 统一的 config 文件管理
  3. 示例 API 请求

适合直接拷贝到 React 项目里使用。


1. 新建环境变量文件

在项目根目录新建以下文件:

.env.development

REACT_APP_API_URL=http://localhost:3000/api
REACT_APP_DEBUG=true

.env.production

REACT_APP_API_URL=https://api.example.com
REACT_APP_DEBUG=false

.env.test

REACT_APP_API_URL=http://test.api.example.com
REACT_APP_DEBUG=true

2. 新建配置管理文件

📂 src/config/index.js

const env = process.env.NODE_ENV; // development | production | testconst configs = {development: {apiBaseUrl: process.env.REACT_APP_API_URL,debug: process.env.REACT_APP_DEBUG === 'true',},production: {apiBaseUrl: process.env.REACT_APP_API_URL,debug: process.env.REACT_APP_DEBUG === 'true',},test: {apiBaseUrl: process.env.REACT_APP_API_URL,debug: process.env.REACT_APP_DEBUG === 'true',},
};export default configs[env];

3. 示例 API 工具类

📂 src/utils/api.js

import config from '../config';export async function fetchUsers() {try {const response = await fetch(`${config.apiBaseUrl}/users`);if (!response.ok) {throw new Error(`HTTP error! status: ${response.status}`);}return await response.json();} catch (error) {if (config.debug) {console.error('API Error:', error);}throw error;}
}

4. 在组件中使用

📂 src/App.js

import React, { useEffect, useState } from 'react';
import { fetchUsers } from './utils/api';
import config from './config';function App() {const [users, setUsers] = useState([]);useEffect(() => {fetchUsers().then(setUsers).catch(err => {console.error('加载用户失败', err);});}, []);return (<div><h1>React 多环境配置 Demo</h1><p>当前环境: {process.env.NODE_ENV}</p><p>API 地址: {config.apiBaseUrl}</p><ul>{users.map(user => (<li key={user.id}>{user.name} ({user.email})</li>))}</ul></div>);
}export default App;

5. 启动方式

# 开发环境
npm start   # 自动读取 .env.development# 生产环境(打包)
npm run build   # 自动读取 .env.production# 测试环境
npm test   # 自动读取 .env.test

✅ 这样就有了:

  • 三套环境配置(dev/prod/test)
  • 统一的 config 文件(方便管理)
  • 真实 API 调用 demo

http://www.xdnf.cn/news/19428.html

相关文章:

  • 学习数据结构(15)插入排序+选择排序(上)
  • 算法——链表
  • 开源协作白板 – 轻量级多用户实时协作白板系统 – 支持多用户绘图、文字编辑、图片处理
  • 进程间通信IPC(interprocess communicate)
  • Introduction to GIS —— Chapter 4(Raster Data Model)
  • 解读IEC 60529-2013
  • MySQL 公用表达式
  • AI军团协同作战:Manus Wide Research深度解析
  • CAN数据链路层、网络层(ISO11898、15765)
  • JVM-指针压缩
  • Day 01(02): 精读HDFS概念
  • PortSwigger靶场之DOM XSS in document.write sink using source location.search通关秘籍
  • 多线程使用场景一(es数据批量导入)
  • 使用node-red+opencv+mqtt实现相机图像云端查看
  • 【openGauss】Oracle与openGauss/GaussDB数据一致性高效核对方案
  • 解决Docker运行hello-world镜像报错问题
  • 烦人的Nano 编辑器,如何退出呢?
  • 【Java后端】SpringBoot配置多个环境(开发、测试、生产)
  • Python|Pyppeteer解决无法启动Chromium浏览器的问题(35)
  • 云网络(参考自腾讯云计算工程师认证)
  • MySQL服务启动命令手册(Linux+Windows+macOS)(下)
  • CAD2024安装包下载与安装详细教程
  • Marco:阿里国际推出的商用翻译大模型,支持15种语言,效果超越谷歌、GPT-4
  • Overleaf中文显示
  • AI 相关内容:Agent、MCP、Prompt 与 RAG 入门指南
  • tkinter布局
  • 鸿蒙应用开发:开机自启并自检网络状态
  • docker,数据卷
  • Flink部署实战:从入门到优化
  • Linux基本工具(yum、vim、gcc、Makefile、git、gdb)