React 项目环境变量使用指南

在 React 项目中正确使用环境变量是管理不同环境配置的关键技术。以下是完整的解决方案:

1. 创建环境变量文件

React 项目支持以下环境变量文件(按优先级从高到低):

  • .env.development.local (本地开发环境)
  • .env.development (开发环境)
  • .env.production.local (生产环境本地覆盖)
  • .env.production (生产环境)
  • .env (所有环境)

示例文件内容

# .env.development
REACT_APP_API_URL=https://dev.api.example.com
REACT_APP_DEBUG=true# .env.production
REACT_APP_API_URL=https://api.example.com
REACT_APP_DEBUG=false

2. 环境变量命名规则

必须REACT_APP_ 开头,否则 React 不会包含它:

# 正确 ✅
REACT_APP_API_KEY=abc123# 错误 ❌(不会被包含)
API_KEY=abc123

3. 在代码中访问环境变量

// 直接通过 process.env 访问
const apiUrl = process.env.REACT_APP_API_URL;function App() {return (<div><p>API 地址: {process.env.REACT_APP_API_URL}</p>{process.env.REACT_APP_DEBUG && <DebugPanel />}</div>);
}

4. 不同环境的构建命令

Create React App 自动根据命令使用对应环境文件:

# 开发环境(使用 .env.development)
npm start# 生产环境(使用 .env.production)
npm run build# 测试环境(使用 .env.test)
npm test

5. 自定义环境配置

如果需要更多环境(如 staging):

  1. 安装 env-cmd
npm install env-cmd
  1. 创建 .env.staging 文件

  2. 修改 package.json:

{"scripts": {"build:staging": "env-cmd -f .env.staging npm run build"}
}

6. TypeScript 支持

src/react-env.d.ts 中添加类型声明:

declare namespace NodeJS {interface ProcessEnv {REACT_APP_API_URL: string;REACT_APP_DEBUG?: 'true' | 'false';// 添加其他环境变量...}
}

7. 高级用法

动态配置

// src/config.js
const config = {apiUrl: process.env.REACT_APP_API_URL,debug: process.env.REACT_APP_DEBUG === 'true',// 其他配置...
};export default config;

在 HTML 中使用

<title>%REACT_APP_SITE_NAME%</title>

8. 安全注意事项

  1. 不要在前端代码中存储敏感信息(如数据库密码)
  2. 不要.env.local 提交到版本控制
  3. 生产环境变量应通过 CI/CD 系统设置

9. 常见问题解决

问题1:环境变量未生效

  • 确保变量名以 REACT_APP_ 开头
  • 重启开发服务器(npm start
  • 检查 .gitignore 是否包含 .env.local

问题2:TypeScript 报错

添加或更新 src/react-env.d.ts 类型声明文件

问题3:构建后变量不更新

  • 生产环境变量是在构建时嵌入的,需要重新构建
  • 对于运行时配置,考虑使用 public/config.js 动态加载

10. 替代方案比较

方案优点缺点
传统 .env 文件简单直接需要重新构建才能更新
运行时加载配置无需重新构建增加初始加载时间
后端接口获取配置动态更新需要额外API调用

通过遵循这些实践,您可以有效地管理 React 项目中的环境变量,确保不同环境间的配置隔离和安全。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/89355.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/89355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle 关于一些连接故障的总结

积累了几次Oracle客户端连接故障&#xff0c;做下总结。 文章目录1、案例案例1&#xff1a;客户端连接报错ORA-12514案例2&#xff1a;客户端连接报错ORA-28547案例3&#xff1a;客户端连接报错&#xff1a;Got minus one from a read call案例4&#xff1a;客户端连接报错&…

V-USB USB设备模拟原理分析

V-USB USB设备模拟原理分析 通过分析V-USB项目的核心文件&#xff0c;详细解释这个项目是如何在AVR微控制器上模拟USB设备的&#xff1a; 1. 整体架构 V-USB是一个纯软件实现的USB低速设备驱动&#xff0c;主要由以下几个核心文件组成&#xff1a; usbdrv.c : USB协议栈的C语言…

kafka3.6下载安装(传统架构/KRaft模式)+实例测试

知识补充&#xff1a; Kafka 和 ZooKeeper 的关系可以用 “协作依赖” 来概括。在 Kafka 的早期版本&#xff08;Kafka 2.8.0 之前&#xff09;中&#xff0c;ZooKeeper 是 Kafka 的核心依赖&#xff0c;用于管理集群元数据、协调 Broker 和 Controller 选举等关键功能。但从 …

华控智能产品特点——产品生态全景与场景化创新

公司构建 “3X”产品战略&#xff0c;以三大核心场景为基础持续拓展技术外延&#xff1a; 1. 智能安防产品线军工级指纹枪盒&#xff1a;采用6061-T6航空铝材&#xff0c;内嵌震动报警模块&#xff0c;非法开箱触发90dB警鸣。为军工企业定制的双人认证版本需两位授权人员同时验…

爬虫核心原理与入门技巧分析

一、爬虫核心原理&#xff1a;模拟人类浏览的“自动化工具” 简单来说&#xff0c;网络爬虫&#xff08;Web Crawler&#xff09;是一种按照一定规则&#xff0c;自动抓取互联网信息的程序或脚本。其核心原理可以类比人类浏览网页的过程&#xff0c;只不过将手动操作转化为了代…

spring-cloud微服务部署-feign服务间调用

1 准备工作 需要安装并启动nacos&#xff0c;作为服务注册中心。地址&#xff1a;https://nacos.io/ 2 项目结构 parent的pom.xml声明依赖&#xff1a; <dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</gr…

IDEA高效开发:Database Navigator插件安装与核心使用指南

目录 1.前言 2.正文 2.1安装流程 2.1.1IDE内部安装 2.1.2手动下载安装 ⚠️ 避坑指南 2.2使用教程 2.2.1连接数据库 2.2.2查看数据库/表 2.2.3查询数据 2.2.4修改表结构 2.2.5生成代码 2.2.6常见故障排除 3.小结 1.前言 “作为Java开发者&#xff0c;日常与数据…

Maven私服仓库,发布jar到私服仓库,依赖的版本号如何设置,规范是什么

Maven私服仓库&#xff0c;发布jar到私服仓库&#xff0c;依赖的版本号如何设置&#xff0c;规范是什么

量子卷积神经网络:量子计算与深度学习的融合革命

引言&#xff1a;当卷积神经网络遇上量子计算在人工智能与量子计算双重浪潮的交汇处&#xff0c;量子卷积神经网络&#xff08;Quantum Convolutional Neural Network, QCNN&#xff09;正成为突破经典算力瓶颈的关键技术。传统卷积神经网络&#xff08;CNN&#xff09;在图像识…

线程(三) linux 同步

目录 概念补充 条件变量 操作 例:多线程抢票 封装 生产者消费者模型 生产者和消费者之间的关系 BlockQueue(阻塞队列) 单生产单消费 信号量 简介 操作 多生产者多消费者RingQueue(环形队列)代码 sem封装 信号量与锁 小知识 概念补充 同步:在保证数据安全的前…

Eclipse 生成 jar 包

Eclipse 生成 jar 包 引言 Eclipse 是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;广泛应用于 Java 开发领域。在 Java 开发过程中&#xff0c;将源代码编译成可执行的 jar 包是常见的需求。本文将详细介绍在 Eclipse 中生成 jar 包的方法&#xff0c;包…

kafka--基础知识点--0

kafka 架构 https://cloud.tencent.com/developer/article/2307892 19张图 生产者架构 消息的磁盘存储文件结构 https://cloud.tencent.com/developer/article/2307892 19张图 produce消息分区策略 kafka–基础知识点–5–生产者分区策略 ISR、OSR、AR 是什么&#xff1…

替换ngnix ssl 证书

1. 阿里云数字证书管理服务 -》SSL 证书管理 -》个人测试证书&#xff08;原免费证书&#xff09;-》查找相应域名的证书/新建证书&#xff0c;申请 -》下载证书&#xff0c;如果是ngnix服务器&#xff0c;就下载pem/key格式2.远程连接服务器a.nginx -t :查看ngnix 配置文件在哪…

rabbitmq ACK

在消息队列&#xff08;如 RabbitMQ&#xff09;中&#xff0c;**ACK&#xff08;Acknowledgement&#xff09;是消息确认机制**&#xff0c;用于确保消息被消费者成功处理。其核心作用是解决以下问题&#xff1a;mermaid复制代码导出svg&#x1f4cc; ACK 的两种模式1. 自动确…

性能远超Spring Cloud Gateway!Apache ShenYu如何重新定义API网关!

Apache ShenYu Apache ShenYu是一个异步的&#xff0c;高性能的&#xff0c;跨语言的&#xff0c;响应式的 API 网关。 特点 • 代理&#xff1a;支持Apache Dubbo&#xff0c;Spring Cloud&#xff0c;gRPC&#xff0c;Motan&#xff0c;SOFA&#xff0c;TARS&#xff0c;We…

质变科技亮相可信数据库发展大会,参编《数据库发展研究报告2025》

数据库作为支撑数据存储与计算的关键载体&#xff0c;在数据要素时代的重要性愈发凸显。过去一年&#xff0c;全球数据库新技术、新业态、新模式不断涌现&#xff1b;我国数据库应用创新于重点行业快速推进。随着人工智能技术深刻变革&#xff0c;数据库与AI融合趋势愈发明显。…

LVS(Linux Virtual Server)详细笔记(理论篇)

一.详解1. LVS概述LVS&#xff08;Linux Virtual Server&#xff09;是由章文嵩博士发起的开源负载均衡项目&#xff0c;通过在Linux内核中实现高性能四层交换能力&#xff0c;将多台物理服务器组织成单一虚拟服务。它能够处理百万级并发连接&#xff0c;同时保持线性扩展能力&…

Oracle Data Pump 导入冲突解决

问题场景 使用 impdp 导入数据时遇到"对象已存在"错误&#xff0c;导致导入失败。 核心解决方案 1. TABLE_EXISTS_ACTION 参数 impdp username/passworddatabase \ directoryDATA_PUMP_DIR \ dumpfileyour_dump_file.dmp \ TABLE_EXISTS_ACTIONREPLACE作用&#xff1…

汽车免拆诊断案例 | 2015款进口起亚索兰托L车漏电

故障现象 一辆2015款进口起亚索兰托L车&#xff0c;搭载D4HB发动机&#xff0c;累计行驶里程约为15万km。车主反映&#xff0c;该车停放2天左右就因蓄电池亏电而无法起动&#xff0c;更换过蓄电池&#xff0c;但故障依旧&#xff0c;于是将车开至我厂检修。故障诊断 接车后用…

mysql复制延迟如何处理

一、复制延迟的原因主库增删改并发大大表在做DDL从库备份导致延迟大事务从库机器配置差二、怎样判断延迟使用 SHOW SLAVE STATUS 命令Seconds_Behind_Master&#xff1a;表示从库落后主库的秒数&#xff08;若为 NULL&#xff0c;可能复制线程已停止&#xff09;对比位点字段名…