React添加自定义环境变量

本文介绍了如何在React项目中使用.env文件来定义和管理开发环境变量,包括默认的.env文件及其优先级,以及针对不同环境(如development、test、production)的.env文件。通过在.env.development.local中设置环境变量,例如REACT_APP_RECORDS_API_URL,可以实现API URL的本地配置,并在组件中使用这些变量进行API调用。

在 .env 中添加开发环境变量

 注意:此功能适用于 react-scripts@0.5.0 及更高版本。

要定义永久环境变量,请在项目的根目录中创建名为 .env 的文件:

REACT_APP_SECRET_CODE=abcdef

注意:你必须以 REACT_APP_ 开头创建自定义环境变量。除了 NODE_ENV 之外的任何其他变量都将被忽略,以避免意外地在可能具有相同名称的计算机上公开私钥。更改任何环境变量都需要重新启动正在运行的开发服务器。

.env 文件 应该 检入源代码控制(排除 .env*.local)。

还可以使用哪些其他 .env 文件?

注意:此功能 适用于 react-scripts@1.0.0 及更高版本

  • .env:默认。
  • .env.local:本地覆盖。除 test 之外的所有环境都加载此文件
  • .env.development.env.test.env.production:设置特定环境。
  • .env.development.local.env.test.local.env.production.local:设置特定环境的本地覆盖。

左侧的文件比右侧的文件具有更高的优先级:

  • npm start.env.development.local.env.development.env.local.env
  • npm run build.env.production.local.env.production.env.local.env
  • npm test.env.test.local.env.test.env (注意没有 .env.local )

如果机器没有明确设置它们,这些变量将作为默认值。
 

 举例:

1.在项目根目录新建.env.development.local,并定义环境变量:

REACT_APP_RECORDS_API_URL=http://localhost:3004

注意:每次改变.env.development.local后需要进行npm start重启才能生效。

2.在RecordsAPI.js文件中定义一个系统变量REACT_APP_RECORDS_API_URL调用失败时使用的默认值,并将GET方法也定义一个方法方便调用。

import axios from 'axios';

const api = process.env.REACT_APP_RECORDS_API_URL || "http://localhost:5000"
export const getAll = () => axios.get(`${api}/records`)

3.在Records_axios.js文件中调用getAll()方法。

import React,{ Component } from "react";
import Record from './Record';
import * as RecordsAPI from '../utils/RecordsAPI.js'

class Records_axios extends Component{
	constructor() {
	    super();
		this.state = {
			error: null,
			isLoaded: false,
			records: []
		}
	}
	
	componentDidMount(){
		RecordsAPI.getAll().then(
		response => this.setState({
			records: response.data,
			isLoaded: true,
			}),
		).catch(
			error => this.setState({
			isLoaded: true,
			error,
			}),
		)
	}
	
	render(){
		const {error, isLoaded, records} = this.state;
		if (error) {
			return <div>Error: {error.message}</div>;
		}
		else if (!isLoaded){
			return <div>Loading...</div>;
		}
		else {
		  return (
			<div>
				<h2>Records</h2>
				<table className="table table-bordered">
				  <thead>
					<tr>
					  <th>Date</th>
					  <th>Title</th>
					  <th>Amount</th>
					</tr>
				  </thead>
				  <tbody>
				  {records.map((record, id) => <Record  key={record.id} record={record} />)}
				  </tbody>
				</table>
			</div>
		  );
		}
	}
}

export default Records_axios;

在使用 `npm build` 构建项目时,配置自定义环境变量是一个常见的需求,尤其是在需要区分开发、测试和生产环境的场景中。可以通过多种方式实现这一目标,包括使用 `.env` 文件、`package.json` 中定义的脚本变量以及结合构建工具(如 Webpack、Vite 或 UniApp)的环境变量支持。 ### 使用 `.env` 文件配置环境变量 在项目根目录中创建不同环境的 `.env` 文件,例如: - `.env.development` - `.env.production` - `.env.test` 在这些文件中定义环境变量,格式如下: ```env # .env.development VUE_APP_API_URL=http://localhost:3000 ``` ```env # .env.production VUE_APP_API_URL=https://api.example.com ``` ```env # .env.test VUE_APP_API_URL=https://test-api.example.com ``` 在代码中通过 `process.env.VUE_APP_API_URL` 访问这些变量。这种方式适用于 Vue.js、React 等基于 Webpack 的项目[^1]。 ### 在 `package.json` 中配置自定义环境变量 可以在 `package.json` 的 `scripts` 字段中直接定义环境变量。例如: ```json { "scripts": { "build": "webpack --mode production", "build:test": "webpack --mode test", "build:dev": "webpack --mode development" } } ``` 构建时通过命令行传递环境变量: ```bash npm run build:test ``` 在 Webpack 配置中可以通过 `process.env.NODE_ENV` 获取当前环境模式。也可以结合 `DefinePlugin` 手动注入自定义变量: ```js new webpack.DefinePlugin({ __APP_ENV__: JSON.stringify(process.env.VUE_APP_API_URL) }); ``` ### 使用命令行参数传递环境变量 在构建时也可以直接通过命令行传递环境变量: ```bash npm run build -- --env API_URL=https://api.example.com ``` 在 Webpack 配置中接收该变量: ```js module.exports = (env) => { return { // 使用 env.API_URL }; }; ``` ### UniApp 环境变量配置 对于 UniApp 项目,可以在 `package.json` 中定义脚本并指定环境变量: ```json { "uni-app": { "scripts": { "test": { "title": "微信测试环境", "env": { "UNI_PLATFORM": "mp-weixin" }, "define": { "TEST_WEIXIN": true } } } } } ``` 在 JS 文件中通过条件编译控制变量: ```js let baseURL = ''; if (process.env.NODE_ENV === "development") { baseURL = "http://development.com"; } else if (process.env.NODE_ENV === "production") { baseURL = "http://production.com"; } // #ifdef TEST_WEIXIN baseURL = "http://test.com"; // #endif ``` ### Node.js 环境变量配置 在 Node.js 项目中,也可以通过设置全局 `npm` 路径和环境变量来控制构建行为。例如: ```bash npm config set prefix "D:\\nodefile\\node_global" npm config set cache "D:\\nodefile\\node_cache" ``` 然后在系统环境变量 `PATH` 中添加 `D:\nodefile\node_global`,并在 `NODE_PATH` 中设置 `D:\nodefile\node_global\node_modules`[^2]。 ### 示例:自定义构建脚本 假设使用 Vite 构建项目,可以在 `package.json` 中定义如下脚本: ```json { "scripts": { "build": "vite build", "build:test": "vite build --mode test", "build:dev": "vite build --mode development" } } ``` 在 `vite.config.js` 中可以读取当前模式: ```js export default ({ mode }) => { const env = loadEnv(mode, process.cwd(), 'VITE_'); return { define: { __APP_ENV__: JSON.stringify(env.VITE_API_URL) } }; }; ``` ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值