.env 环境变量使用,React项目中使用 .env.*等文件使用

news2024/10/6 22:24:39

一、公共.env环境变量

二、.env.*环境变量(例如:.env.test 环境变量)

公共 .env 环境变量

在项目开发中,我们不可避免的会需要使用 .env 环境变量,例如在定义接口 api 的 baseURL 时,会根据不同的环境,配置不同的根地址 baseURL。

class ApiBaseUrl {
    static getApiBaseURL = () => {
        switch (process.env.NODE_ENV) {
            case 'development':
                return 'http://192.168.0.216:9000'
            default:
                return 'https://mock.apifox.cn/m2/2775158-0-default';
        }
    }
}

使用 create-react-app 命令创建的 react 项目,在使用 yarn run eject 命令将所有内建的配置暴露出来后,在 package.json 文件中,提供了一个 start 命令,和一个 build 命令,这两个命令在

"scripts": {
    "start": "cross-env PORT=5432 node scripts/start.js",
    "build": "cross-env node scripts/build.js",
    "test": "node scripts/test.js"
  },

根据命令,可以在根目录的 scripts 文件夹下,找到 start.js、build.js 两个文件,打开文件可以看到

start.js 文件
// Do this as the first thing so that any code reading it knows the right env.
process.env.BABEL_ENV = 'development';
process.env.NODE_ENV = 'development';
...
// Ensure environment variables are read.
require('../config/env');
...
build.js 文件
// Do this as the first thing so that any code reading it knows the right env.
process.env.BABEL_ENV = 'production';
process.env.NODE_ENV = 'production';
...
// Ensure environment variables are read.
require('../config/env');
...

在这两个文件中会读取 .env 文件。
在根目录,/config/env.js 文件中的 getClientEnvironment 方法,会将 REACT_APP 开头的环境变量写入。

因此可以在根目录下创建一个 .env 文件,写一些自定义的公共环境变量(在变量名前加了 “REACT_APP_” 前缀,这是因为 React 会自动将以 “REACT_APP_” 开头的变量添加到 “process.env” 对象中)。

/config/env.js 文件

function getClientEnvironment(publicUrl) {
  const raw = Object.keys(process.env)
    .filter(key => REACT_APP.test(key))
    .reduce(
      (env, key) => {
        env[key] = process.env[key];
        return env;
      },
      {
        // Useful for determining whether we’re running in production mode.
        // Most importantly, it switches React into the correct mode.
        NODE_ENV: process.env.NODE_ENV || 'development',
        // Useful for resolving the correct path to static assets in `public`.
        // For example, <img src={process.env.PUBLIC_URL + '/img/logo.png'} />.
        // This should only be used as an escape hatch. Normally you would put
        // images into the `src` and `import` them in code to get their paths.
        PUBLIC_URL: publicUrl,
        // We support configuring the sockjs pathname during development.
        // These settings let a developer run multiple simultaneous projects.
        // They are used as the connection `hostname`, `pathname` and `port`
        // in webpackHotDevClient. They are used as the `sockHost`, `sockPath`
        // and `sockPort` options in webpack-dev-server.
        WDS_SOCKET_HOST: process.env.WDS_SOCKET_HOST,
        WDS_SOCKET_PATH: process.env.WDS_SOCKET_PATH,
        WDS_SOCKET_PORT: process.env.WDS_SOCKET_PORT,
        // Whether or not react-refresh is enabled.
        // It is defined here so it is available in the webpackHotDevClient.
        FAST_REFRESH: process.env.FAST_REFRESH !== 'false',
      }
    );
  // Stringify all values so we can feed into webpack DefinePlugin
  const stringified = {
    'process.env': Object.keys(raw).reduce((env, key) => {
      env[key] = JSON.stringify(raw[key]);
      return env;
    }, {}),
  };

  return { raw, stringified };
}

由于 create-react-app 只提供了 production、development 两种环境,如果想再加一个 test 环境,就需要手动设置了,或是在package.json 文件的命令中加。

下面提供了一种方式,将项目的环境变量与命令绑定,通过跑不通的命令来控制环境变量

.env.* 环境变量

dotenv、dotenv-cli

安装命令

$ npm install -D dotenv-cli

$ yarn add dotenv-cli --dev

使用方法

这里以.env.test 为例

  1. 在项目根目录创建 .env.test 文件
    请添加图片描述
  2. .env.test 文件中写入内容
# .env.test

REACT_APP_ENV = 'test'
  1. 在 package.json 文件中加一行命令
"start:test": "cross-env PORT=4321 dotenv -e .env.test node scripts/start.js",
  1. 在代码中使用,查看是否生效
class ApiBaseUrl {
    static getApiBaseURL = () => {
    	console.log('process.env.REACT_APP_ENV:',process.env.REACT_APP_ENV)
        switch (process.env.REACT_APP_ENV) {
            case 'development':
                return 'http://192.168.0.216:9000'
            case 'test':
                return 'https://mock.apifox.cn/m1/4562135-0-default'
            default:
                return 'https://mock.apifox.cn/m2/2775158-0-default'
        }
    }
}

请添加图片描述

  1. 需要打包 test 环境,在 package.json 文件中加一行命令
"build:test": "cross-env dotenv -e .env.test node scripts/build.js",

请添加图片描述
打包后在服务器看也能看到 test 的环境变量
(没有服务器,可以本地起一个服务器尝试)

如果还需要别的变量,只需要采用 REACT_APP_(name) 的命名格式,在需要的环境变量文件中创建就可以了。
项目中可以通过 process.env.REACT_APP_(name) 对创建的变量进行访问。

package.json 文件

"scripts": {
    "start:develop": "cross-env PORT=4321 dotenv -e .env.development node scripts/start.js",
    "start:test": "cross-env PORT=4321 dotenv -e .env.test node scripts/start.js",
    "build:test": "cross-env dotenv -e .env.test node scripts/build.js",
    "build": "cross-env node scripts/build.js",
    "test": "node scripts/test.js"
  },

参考:
React使用.env.*进行环境部署
React项目配置axios和反向代理和process.env环境配置等

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

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

相关文章

偶数分频器电路设计

目录 偶数分频器电路设计 1、偶数分频器电路简介 2、实验任务 3、程序设计 方法1&#xff1a; 3.1、8分频电路代码如下&#xff1a; 3.2、仿真验证 3.2.1、编写 TB 文件 3.2.2、仿真验证 方法2&#xff1a; 4、计数器进行分频 4.1、仿真测试 偶数分频器电路设计 分…

软件设计原则与设计模式

设计中各各原则同时兼有或冲突&#xff0c;不存在包含所有原则的设计 一&#xff1a;单一职责原则又称单一功能原则 核心&#xff1a;解耦和增强内聚性&#xff08;高内聚&#xff0c;低耦合&#xff09; 描述&#xff1a;类被修改的几率很大&#xff0c;因此应该专注于单一的…

YOLOv5 vs YOLOv8

1 概述 YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本。 https://github.com/ultralytics/yolov5 https://github.com/ultralytics/ultralytics 2 网络结构 YOLOv5 N/S/M/L/X 骨干网络的通道数设置使用同一套缩放系数&#xff1b; YOLO…

Axure教程——滑动解锁

本文将教大家如何用AXURE中的动态面板制作滑动解锁 一 、效果 预览地址&#xff1a;https://6dnu91.axshare.com 二、功能 滑动滑块从左到右&#xff0c;提示验证成功 三、制作 拖入一个动态面板组件&#xff0c;如图&#xff1a; 点击动态面板进入&#xff0c;拖入一个矩形…

【生态经济学】R语言机器学习方法在生态经济学领域中的实践技术

查看原文>>>基于R语言机器学习方法在生态经济学领域中的实践技术 近年来&#xff0c;人工智能领域已经取得突破性进展&#xff0c;对经济社会各个领域都产生了重大影响&#xff0c;结合了统计学、数据科学和计算机科学的机器学习是人工智能的主流方向之一&#xff0c…

RK3288 Android logo

一、Android 系统开机logo的修改 安卓系统的开机分为u-boot logo 和 kernel logo开机logo图片必须是 bmp 格式&#xff0c;并且分辨率必须为偶数将制作好的BMP格式logo图片放置Android源码kernel目录下&#xff0c;重新编译即可 二、Android logo常见问题分析 1、RK3288 Andr…

基于SSM+jsp的电子商城系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

IT云运维技术分享

1 运维体系 1.1 市场对运维的需求 时代发展到今天&#xff0c;社会的生活方式与生产方式的全面的数字化&#xff0c;无论是传统企业还是互联网企业&#xff0c;都在全面上云&#xff0c;这也意味着企业的关键业务乃至“身家性命”都已经全部放在 IT 系统之上&#xff0c;因此…

UWB自组网定位方案_基于UWB技术的消防应急救援定位解决方案

目前国内应急救援市场都是基于被动定位应用&#xff0c;在特殊情况下救援也大多处于单兵作战的情况&#xff0c;并不能及时知道自己和自己组员的位置信息和状态&#xff0c;且没有场景感知和室内外一体位置信息结合&#xff0c;使相关救援人员处于更加危险境地。本篇就带大家详…

【SWAT水文模型】Tips1:土地利用/土壤类型以全国数据分类

Tips1&#xff1a;土地利用/土壤类型以全国数据分类 1 土壤类型处理Step1 从全国土壤数据库中裁剪得到研究区域内土壤类型Step2 确定研究区域内重分类标准及类型 参考 1 土壤类型处理 直接对全国土壤类型数据进行分类&#xff0c;在SWAT模型中输入全国土壤类型&#xff0c;亦可…

【Linux】文件权限解析

一、Linux用户分类 Linux下有两种用户&#xff1a;超级用户&#xff08;root&#xff09;、普通用户 超级用户&#xff1a;可以再linux系统下做任何事情&#xff0c;不受限制 普通用户&#xff1a;在linux下做有限的事情。 超级用户的命令提示符是“#”&#xff0c;普通用户的…

近期煤矿事故及电力综合自动化系统的介绍

安科瑞虞佳豪 5月29日&#xff0c;山西灵石红杏鑫鼎泰煤业有限公司发生一起死亡1人的安全事故&#xff1b;5月24日&#xff0c;山西华阳集团新能股份有限公司二矿发生一起死亡1人的安全事故。 ​山西省应急管理厅、山西省地方煤矿安全监督管理局责令山西灵石红杏鑫鼎泰煤业有…

软考高级系统架构设计师(三) 基础知识之操作系统3文件管理

目录 文件管理 索引文件结构 位示图 ​树形目录结构 文件管理 文件管理&#xff0c;主要涉及文件的逻辑组织和物理组织&#xff0c;目录的结构和管理 索引文件结构 索引文件结构&#xff1a;通常是13个节点的结构&#xff0c;分为直接索引&#xff08;0-9&#xff09;&#…

星辰天合与中飞院合作 成立“民航高性能数据分析与存储联合实验室”

近日&#xff0c;星辰天合与中国民航飞行学院&#xff08;以下简称“中飞院”&#xff09;宣布合作成立“民航高性能数据分析与存储联合实验室”&#xff08;以下简称“存储实验室”&#xff09;&#xff0c;并由星辰天合 CTO 王豪迈与现任中飞院总飞行师的“中国民航英雄机长”…

Winfrom多语言切换

“ 实现多语言的切换原理和ResXResourceManager使用。” &#xff0c;时长00:08 实现多语言的切换原理就很简单了&#xff0c;例如默认是中文&#xff0c;from下就会有一个Form1.resx资源文件&#xff0c;所有的资源文件都是.resx。换个思路如果是WPF程序&#xff0c;那么资源文…

String类—javaSE

文章目录 1.常用方法1.1字符串构造1.2String对象的比较1.3字符串查找1.4转化1.5字符串替换1.6字符串拆分1.7字符串的截取1.8去掉字符串中的左右空格&#xff0c;保留中间空格 2.字符串常量池2.1 直接使用字符串常量进行赋值2.2通过new创建String类对象2.3 intern方法2.4String类…

韵达快递,你在玩我吗?请你不要挑战用户的底线!

这个周末真的是被韵达快递给气死了。 面对这样的服务&#xff0c;真的是不吐不快。 搞笑之处在于&#xff0c;表面功夫很到位&#xff0c;看似服务很全面&#xff0c;然后就是落实不到位。 为什么会被韵达快递气到呢&#xff1f;在网上买了 6 箱认养一头牛的儿童牛奶&#xff0…

持 PMP®证书增持 CSPM-2证书,大有用处,靠谱!

2023年起&#xff0c;持有PMP证书的朋友可以直接增持一个同等级证书CSPM-2&#xff0c;不用重新考试&#xff0c;不用重新学习&#xff0c;原PMP证书不影响正常使用&#xff0c;相当于多了一个国标项目管理领域的证书。 第一步准备资料 1、填写能力评价表(简历和业绩不用填&am…

ASP.NET Core Web API入门之三:使用EF Core

ASP.NET Core Web API入门之三&#xff1a;使用EF Core 一、引言二、EF Core 的优缺点2.1 优点&#xff1a;2.2 缺点&#xff1a; 三、使用前安装&#xff1a;NuGet包四、实体类更新到数据库实体表4.1 创建 DBEntity 属性4.2 appsettings.json 配置数据库连接串4.3 修改 DemoCo…

Spring Boot 如何使用 Web 容器

Spring Boot 如何使用 Web 容器 在使用 Spring Boot 进行开发时&#xff0c;我们通常需要使用 Web 容器来处理 HTTP 请求和响应。本文将介绍 Spring Boot 如何使用 Web 容器&#xff0c;包括如何配置 Web 容器、如何处理 HTTP 请求和响应等内容&#xff0c;并提供相应的代码示…