在 React 项目中配置 开发(development)、生产(production)、测试(test)环境,一般有两种常见方案:
- 使用环境变量(推荐,React 官方支持)
- 使用多配置文件(如 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 | test
const 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,里面包含
- 环境变量配置(
.env.development
/.env.production
/.env.test
) - 统一的 config 文件管理
- 示例 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 | test
const 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