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

React--》如何高效管理前端环境变量:开发与生产环境配置详解

在前端开发中,如何让项目在不同环境下表现得更为灵活与高效,是每个开发者必须面对的挑战,从开发阶段的调试到生产环境的优化,环境变量配置无疑是其中的关键。

env配置文件:通常用于管理项目的环境变量,环境变量是一些预设的值,可以根据不同的环境(如开发环境、测试环境和生产环境)动态地调整应用的配置,这些配置文件通常包含项目运行所需的各种配置参数,例如 API 地址、版本号、调试模式开关等,接下来就该文件的作用意义及其具体使用进行如下讲解:

作用和优势:在前端开发过程中,项目通常需要在不同的环境中运行,例如:

1)开发环境:通常用于本地开发和调试,可能连接到本地服务,调试模式开启。

2)生产环境:部署到线上,访问的是正式的服务器,配置和性能优化也有所不同。

为了让项目能够在这些环境中灵活切换,开发者通常使用env配置文件来存储环境特定的变量。这些配置文件让项目能够根据不同的环境加载不同的值,从而避免了硬编码配置提高了项目的可维护性和可移植性,前端项目中的env配置文件通常使用.env文件,这个文件遵循一种简单的键值对的形式,类似于:

每行是一个环境变量的声明,REACT_APP_ 是前缀(这个前缀通常是为了符合框架的要求,如 react或vue),而后面的值则可以根据需要进行修改:

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

使用环境变量的好处如下:

1)解耦配置:使得配置文件与代码分离,减少了配置的硬编码提升了项目的灵活性。

2)提高安全:将敏感信息如API密钥等放在.env文件中,可以避免信息泄露。

3)维护管理:不同的开发、测试和生产环境可以使用不同的配置,方便管理多个环境差异

如何使用env配置文件:前端开发框架(如react、vue等)通常提供了一些内置的机制,帮助开发者根据环境加载不同的env配置文件,例如在react中,默认支持.env文件,可以根据不同的环境使用不同的配置文件,如下所示:

env // 默认配置文件(类似全局可以使用)
env.development // 开发环境配置文件(特定环境使用)
env.production // 生产环境配置文件(特定环境使用)
env.test // 测试环境配置文件(特定环境使用)

这里我们根据上面不同的配置环境新建不同的环境变量,然后我们通过在package.json文件中通过–mode来指定要执行的环境变量,如下我们指定test环境变量:

来到控制台可以看到我们执行的test环境变量被打印了出来:

注意:因为这里我们使用了vite框架,接下来我们开始使用.env文件当中的环境变量中前缀必须是VITE_命名,否则是拿不到数据的,如下所示:

vite使用dotenv从你的环境目录中的下列文件加载额外的环境变量:

.env // 所有情况下都会加载
.env.local // 所有情况下都会加载,但会被git忽略
.env.[mode] // 只在指定模式下加载
.env.[mode].local // 只在指定模式下加载,但会被git忽略

像我们常用的就是在不同的环境变量配置文件中,配置不同的环境变量,每次打包的时候就不需要我们去手动更改环境变量了,而是会自动寻找我们配置的环境变量文件进行打包:

使用node:在代码中使用环境变量时可以通过process.env来访问,这使得能够在代码中动态获取不同环境下的配置而不需要在代码中硬编码URL或其他敏感信息,例如在react项目中:

// 终端执行如下命令安装node类型
npm i --save-dev @types/node// 输出 https://api.example.com
console.log(process.env.REACT_APP_API_URL); 

vite配置:根据官方文档的指出我们知道,vite默认是不加载.env文件的,因为这些文件需要在执行完vite配置后才能确定加载哪一个,举个例子root和envDir选项会影响加载行为,不过当你的确需要时你可以使用vite导出的loadEnv函数来加载指定的.env文件,如下所示:

import { defineConfig, loadEnv } from 'vite'
import react from '@vitejs/plugin-react'export default defineConfig(({ command, mode }) => {// 根据当前工作目录中的 `mode` 加载 .env 文件const env = loadEnv(mode, process.cwd(), '') // 设置第三个参数为 '' 来加载所有环境变量,而不管是否有 `VITE_` 前缀。console.log(mode)console.log(command)console.log(env.VITE_APP_TITLE)return {plugins: [react()],build: {outDir: 'docs',},define: {'process.env': env,},}
})

然后控制台打印的数据如下所示:

其中导出函数的两个参数分别对应的值为:·command为当前项目的运行模式,开发模式它返回的值是serve,而在生产环境下为build,-mode读取的是.env文件的后缀,默认:development用于开发,production用于构建,这也就是他为什么会自动读取开发环境变量配置文件的原因:

import { defineConfig, loadEnv } from 'vite'
import react from '@vitejs/plugin-react'export default defineConfig(({ command, mode }) => {// 根据当前工作目录中的 `mode` 加载 .env 文件const env = loadEnv(mode, process.cwd(), '') // 设置第三个参数为 '' 来加载所有环境变量,而不管是否有 `VITE_` 前缀。console.log(mode)console.log(command)console.log(env.VITE_PORT)return {plugins: [react()],server: {host: '0.0.0.0', // 主机port: Number(env.VITE_PORT), // 端口proxy: {"api": {target: env.VITE_APP_API_BASEURL, // 目标代理服务器地址changeOrigin: true, // 允许跨域rewrite: (path) => path.replace(/^/api/, '') // 重写路径}},},}
})

相关文章:

React--》如何高效管理前端环境变量:开发与生产环境配置详解

在前端开发中,如何让项目在不同环境下表现得更为灵活与高效,是每个开发者必须面对的挑战,从开发阶段的调试到生产环境的优化,环境变量配置无疑是其中的关键。 env配置文件:通常用于管理项目的环境变量,环境…...

初始Python篇(6)—— 字符串

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: Python 目录 字符串的常见操作 格式化字符串 占位符 f-string 字符串的 format 方法 字符串的编码与解码 与数据验证相关的方法 …...

【数字花园】个人知识库网站搭建:⑤本地构建+云服务器部署数字花园plus

目录 写在前面:数字花园的定义[[数字花园]]网站的构建原理包括三个步骤:[[我的数字花园搭建笔记]] 现在的部署流程一、本地操作详细教程-2.前置步骤(前面的文章都提过)-1.创建github中转库0. 本地环境配置基础环境:git…...

力扣题目 - 3264.K 次乘运算后的最终数组I

题目 还需要你前往力扣官网查看详细的题目要求 地址 1.给你一个整数数组 nums ,一个整数 k 和一个整数 multiplier 。2.你需要对 nums 执行 k 次操作,每次操作中:找到 nums 中的 最小 值 x ,如果存在多个最小值,选择最…...

Java常用 Date 时间格式化、Calender日历、正则表达式的用法

目录 1. SimpleDateFormat 日期格式化类 1.1 Date 类型转 String 1.2 String 类型转 Date 2. Calendar 日历类 3. 正则表达式 3.1 正则表达式的组成部分 3.2 手机号正则表达式 3.3 常用密码校验正则表达式 1. SimpleDateFormat 日期格式化类 SimpleDateFormat 是Java中…...

网页爬虫技术全解析:从基础到实战

引言 在当今信息爆炸的时代,互联网上的数据量每天都在以惊人的速度增长。网页爬虫(Web Scraping),作为数据采集的重要手段之一,已经成为数据科学家、研究人员和开发者不可或缺的工具。本文将全面解析网页爬虫技术&…...

细说STM32F407单片机SPI基础知识

目录 一、 SPI接口和通信协议 1、 SPI硬件接口 (1)MOSI(Master Output Slave Input) (2)MISO(Master Input Slave Output) (3)SCK 2、SPI传输协议 (1)CPHA0时的数据传输时序 …...

【OJ题解】面试题三步问题

个人主页: 起名字真南的CSDN博客 个人专栏: 【数据结构初阶】 📘 基础数据结构【C语言】 💻 C语言编程技巧【C】 🚀 进阶C【OJ题解】 📝 题解精讲 目录 **题目链接****解题思路****1. 问题分析****2. 递归思路****3. 优化方案&a…...

Linux vi/vim 编辑器使用教程

Linux vi/vim 编辑器使用教程 引言 Linux 系统中的 vi 和 vim 是非常强大的文本编辑器,它们以其高效性和灵活性而闻名。vim 是 vi 的增强版,提供了更多的功能和改进的用户界面。本文将详细介绍 vi/vim 的基本用法,包括打开文件、编辑文本、…...

长安大学《2024年812自动控制原理真题》 (完整版)

本文内容,全部选自自动化考研联盟的:《长安大学812自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2024年真题 Part1:2024年完整版真题 2024年真题...

服务器一般装什么系统?

在服务器管理中,操作系统的选择是一个关键因素,它直接影响到服务器的稳定性、性能和可维护性。那么为什么有些服务器选择Linux,而不是Windows?选择合适的操作系统对服务器的性能和安全性有多么重要? 在众多操作系统中…...

Gitlab ci/cd 从0-1持续集成持续发布前端

关于gitlab ci/cd,就是实现DevOps的能力,即Development &Operations的缩写,也就是开发&运维。CI/CD 指的是软件开发的持续集成方法,我们可以持续构建、测试和部署软件。通过持续方法的迭代能使得我们减少在错误代码或者错…...

#GC4049. GC.2017---. GC.2016.六年级

这套题包含了历年真题,包含了前面我写的博客中的题目,十分重要!!!!要考试的同学可以参考一下!! 此套题限时3小时。 #GC4049. GC.2017.六年级.01.更多闰年 题目描述 在 smoj 网站上…...

UE5中实现Billboard公告板渲染

公告板(Billboard)通常指永远面向摄像机的面片,游戏中许多技术都基于公告板,例如提示拾取图标、敌人血槽信息等,本文将使用UE5和材质节点制作一个公告板。 Gif效果: 网格效果: 1.思路 通过…...

Android系统(android app和系统架构)

文章目录 AndroidAndroid Apps四大组件 Android系统Platform API之下:一个微笑内核adb(Android Debug Bridge) Android包管理机制Android的Intent机制参考 Android LinuxFrameworkJVM 在Linux/Java上做了个二次开发?并不完全是:Android定义…...

docker设置容器自动启动

说起开机自动启动应该很多人都遇到过,我们公司做的系统很多的中间件都没有设置开机自动启动然后中间修改问题又设置了一些临时生效的文件,开始的时候大家都不以为意,知道公司陆续有人离职入职管理交接一塌糊涂,项目成了历史遗留问…...

在 React 中,创建和嵌套组件、添加标签和样式、显示数据、渲染条件和列表、对事件做出响应并更新界面以及在组件间共享数据是常见的任务

文章目录 1. 创建和嵌套组件创建组件嵌套组件 2. 添加标签和样式添加标签添加样式 3. 显示数据显示静态数据显示动态数据 4. 渲染条件和列表条件渲染列表渲染 5. 对事件做出响应并更新界面处理事件 6. 在组件间共享数据使用 Context API react 如何创建和嵌套组件 如何添加标签…...

Android命令行工具--dumpsys

dumpsys 是一种在 Android 设备上运行的工具,可提供有关系统服务的信息。可以使用 Android 调试桥 (adb) 从命令行调用 dumpsys,获取在连接的设备上运行的所有系统服务的诊断输出。 此输出通常比您想要的更详细,因此请使用此页面上的命令行选…...

设计模式-访问者模式

背景 做一个对歌手的评价系统,观众分为男人和女人,分别对歌手做出自己的评价。 传统思路: 做一个person父类,Man 和 Woman分别继承自这个父类,在这两个类中执行各自操作。 问题: 可拓展性差&#xff0…...

Vue集成阿里云点播实现视频上传

实现方式有多种&#xff0c;如下是我的实现方式&#xff1a; 一、下载点播插件&#xff0c;在 public 下的 index.html 中引入阿里云点播需要的 js 插件&#xff0c;js 文件最好放在 cdn 上,&#xff0c;这里以放在 public 文件夹下的 static 文件夹中为例&#xff1a; <s…...

ByteByteGo-Forward/Reverse Proxy正/反向代理

原文链接 EP137: Proxy Vs Reverse proxy - ByteByteGo Newsletter 参考链接 Forward proxy vs. reverse proxy: Whats the difference? | TheServerSide 正向代理 &#xff08;Forward Proxy&#xff09; 位置&#xff1a;用户设备 和 互联网 之间 用途&#xff1a;保护客…...

[论文阅读] |智能体长期记忆与反思

写在前面&#xff1a;10月份的时候&#xff0c;联发科天玑9400发布&#xff0c;搭载这款旗舰 5G 智能体 AI 芯片的荣耀MagicOS9.0实现了一句话让手机自动操作美团点咖啡。很快商场实体店里便能看到很多品牌手机已经升级为智能体语音助手。下一步&#xff0c;这些智能体或许便能…...

Elasticsearch Kibana (windows版本) 安装和启动

目录 1.安装 2.启动 elasticsearch 3.启动 kibana 1.安装 elasticsearch下载&#xff0c;官网链接&#xff1a; Download Elasticsearch | Elastichttps://www.elastic.co/downloads/elasticsearch kibana下载&#xff0c;官网链接&#xff1a; Download Kibana Free | G…...

CSS系列(9)-- Transform 变换详解

前端技术探索系列&#xff1a;CSS Transform 变换详解 &#x1f504; 致读者&#xff1a;探索 CSS 变换的魔力 &#x1f44b; 前端开发者们&#xff0c; 今天我们将深入探讨 CSS Transform&#xff0c;学习如何创建引人注目的 2D 和 3D 变换效果。 2D 变换基础 &#x1f68…...

bs4基本运用

1. bs4基本使用 1.1. 简介 bs4的全称为 BeautifulSoup。和lxml一样&#xff0c;是一个html的解析器&#xff0c;主要功能也是解析数据和提取数据 。 本模块作为了解模块&#xff0c;实际开发中很少用这个模块去解析数据&#xff0c;大家可能会想为什么这个模块会逐渐被淘汰&…...

skywalking 搭建 备忘录

基础环境 apache-skywalking-apm-9.6.0.tar.gz apache-skywalking-java-agent-9.1.0.tgz elasticsearch 7.14.1 采用dockers搭建 或者手动部署 kibana 可视化 应用 微服务版 consumer.jar eureka.jar 注册中心 provider.jar skywalking 地址 https://skywalkin…...

C# 和 go 关于can通信得 整理

在C#中开发CAN&#xff08;Controller Area Network&#xff09;通信接口时&#xff0c;确实有一些现成的NuGet包可以简化你的开发工作。这些库通常提供了与CAN硬件接口通信所需的基本功能&#xff0c;如发送和接收CAN消息。下面是一些常用的NuGet包&#xff1a; PCANBasic.NET…...

Unity类银河战士恶魔城学习总结(P179 Enemy Archer 弓箭手)

教程源地址&#xff1a;https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了敌人弓箭手的制作 Enemy_Archer.cs 核心功能 状态机管理敌人的行为 定义了多个状态对象&#xff08;如 idleState、moveState、attackState 等&#xff09;&#xff0c;通过状态机管理敌人的…...

一、LRU缓存

LRU缓存 1.LRU缓存介绍2.LRU缓存实现3.LRU缓存总结3.1 LRU 缓存的应用3.2 LRU 缓存的优缺点 1.LRU缓存介绍 LRU是Least Recently Used 的缩写&#xff0c;意为“最近最少使用”。它是一种常见的缓存淘汰策略&#xff0c;用于在缓存容量有限时&#xff0c;决定哪些数据需要被删…...

基于python绘制数据表(上)

利用python绘制各种数据图表 绘制柱形图-源码 from openpyxl import Workbook from openpyxl.chart import BarChart, Reference# 创建工作薄 wb Workbook(write_onlyTrue) # 创建工作表 ws wb.create_sheet(月收入)# 准备数据 rows [(月份, 销售额),(1, 23),(2, 43),(3, …...

Python Segmentation fault错误定位办法

1. 说明 Python3执行某一个程序时&#xff0c;报Segmentation fault (core dumped)错&#xff0c;但没有告知到底哪里出错&#xff0c;无法查问题&#xff0c;这时就需要一个库faulthandler来帮助分析。 2. 安装faulthandler faulthandler在Python3.3之后成为标准库&#xf…...

快速在远程服务器执行命令、批量在多个服务器执行命令(基于sshpass的自定义脚本fastsh)

在日常服务器操作中&#xff0c;很多时候我们需要同时操作多个服务器。特别对于那些每个服务器都需要操作相同命令的场景&#xff0c;不断的切换命令会话窗口会比较麻烦。基于此&#xff0c;编写了本文中的 fastsh 脚本用于轻度解决这种问题&#xff0c;提高一定的便利性。 使…...

Java基于SpringBoot的企业OA管理系统,附源码

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…...

SSM 垃圾分类系统——环保领域的创新引擎

第1章 概述 1.1 研究背景 随着现代网络技术发展&#xff0c;对于垃圾分类系统现在正处于网络发展的阶段&#xff0c;所以对它的要求也是比较严格的&#xff0c;要从这个系统的功能和用户实际需求来进行对系统制定开发的发展方式&#xff0c;依靠网络技术的的快速发展和现代通讯…...

websocker的java集成过程

第一步&#xff1a;引入依赖包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency> 第二步设置配置类&#xff1a; // 需要注入Bean的话必须声明为配置类 Co…...

如何对小型固定翼无人机进行最优的路径跟随控制?

控制架构 文章继续采用的是 ULTRA-Extra无人机&#xff0c;相关参数如下&#xff1a; 这里用于guidance law的无人机运动学模型为&#xff1a; { x ˙ p V a cos ⁡ γ cos ⁡ χ V w cos ⁡ γ w cos ⁡ χ w y ˙ p V a cos ⁡ γ sin ⁡ χ V w cos ⁡ γ w sin ⁡ χ…...

03、对象的内存布局以及分配方式

在通过前面的文章了解到当一个程序启动的时候&#xff0c;会把一个java文件通过编译成class文件&#xff0c;然后把class字节码加载到JVM内存中&#xff0c;并初始化各种变量和对象实例&#xff0c;同时建立起具体的内存模型进行线程间的数据交换&#xff0c;在这之间对象的实例…...

「Mac玩转仓颉内测版50」小学奥数篇13 - 动态规划入门

本篇将通过 Python 和 Cangjie 双语介绍动态规划的基本概念&#xff0c;并解决一个经典问题&#xff1a;斐波那契数列。学生将学习如何使用动态规划优化递归计算&#xff0c;并掌握编程中的重要算法思想。 关键词 小学奥数Python Cangjie动态规划斐波那契数列 一、题目描述 …...

ADB在浏览器中:ya-webadb项目安装与配置完全指南

ADB在浏览器中&#xff1a;ya-webadb项目安装与配置完全指南 ya-webadb ADB in your browser [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/ya/ya-webadb 项目基础介绍与编程语言 ya-webadb 是一个由 Yume-chan 开发的开源项目&#xff0c;它实现了ADB&#x…...

通过ros2启动gazebo

ros2_integration3.使用gazebo加载URDF 在老版本中&#xff0c;我们使用 gazebo --verbose -s libgazebo_ros_init.so -s libgazebo_ros_factory.so来启动gazebo和ros2与gazebo的桥。 但在新版本中&#xff0c;libazebo_ros_init.so和libazebo_ros_factory.so不再被支持 你…...

WPF 消息循环(二)

们已经知道&#xff0c;win32/MFC/WinForm/WPF 都依靠消息循环驱动&#xff0c;让程序跑起来。 这里就介绍 WPF 中是如何使用消息循环来驱动程序的。 1. 背景 只听说过 Dispatcher &#xff0c;哪里来的消息循环&#xff1f; WPF 启动运行堆栈&#xff1a; > WpfApp1.…...

基于stm32的红外测温系统设计(论文+源码)

1总体方案设计 本课题为基于STM32的红外测温系统设计&#xff0c;在此将系统架构设计如图3.1所示&#xff0c; 整个系统包括STM32F103单片机&#xff0c;红外测温模块MLX90614&#xff0c;显示模块OLED12864&#xff0c;蜂鸣器以及按键等构成&#xff0c;在功能上&#xff0c;…...

分布式 Paxos算法 总结

前言 相关系列 《分布式 & 目录》《分布式 & Paxos算法 & 总结》《分布式 & Paxos算法 & 问题》 参考文献 《图解超难理解的 Paxos 算法&#xff08;含伪代码&#xff09;》《【超详细】分布式一致性协议 - Paxos》 Basic-Paxos 基础帕克索斯算法…...

ubuntu 使用 Times New Roman 字体在 Matplotlib 中绘图并调整字体大小

ubuntu 使用 Times New Roman 字体在 Matplotlib 中绘图并调整字体大小 文章目录 ubuntu 使用 Times New Roman 字体在 Matplotlib 中绘图并调整字体大小1. 安装 Times New Roman 字体验证字体是否安装成功 2. 在 Matplotlib 中加载 Times New Roman 字体3. 在 Matplotlib 中使…...

[网络] UDP协议16位校验和

16位校验和是udp报头中的一个字段,绝大多数的教材和网课都会忽略这个字段,不去细究,我闲的蛋疼问了问ai,得到了一个答案,故作此文,以证明我爱学习之心惊天地泣鬼神(狗头 ai的回答 仅从作用来说,它会根据整个应用层报文进行运算,生成一个准确的数字,这个数字不能保证唯一性,但根…...

【总结·反思·汇报·思考02】裸辞后,我的一些感想和感悟。

Hello&#xff0c;大家好&#xff01; 首先&#xff0c;我需要向大家道个歉&#xff0c;对不起&#xff01;因为最近发生了一些事情&#xff0c;博客文章一直没有更新。&#xff08;90度鞠躬道歉&#xff09; 那么&#xff0c;最近到底发生了什么呢&#xff1f;相信大家已经从…...

【前端开发】HTML+CSS网页,可以拿来当作业(免费开源)

HTML代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content_lizhongyu"widthdevice-width, initial-scale1.0"><title>小兔鲜儿-新鲜、惠民、快捷<…...

java 导出word锁定且部分内容解锁可编辑

使用 Apache POI 创建带编辑限制的 Word 文档 在日常工作中&#xff0c;我们可能需要生成一些带有编辑限制的 Word 文档&#xff0c;例如某些段落只能被查看&#xff0c;而其他段落可以自由编辑。本文介绍如何使用 Apache POI 创建这样的文档&#xff0c;并通过代码实现相应的…...

Scala的隐式类

package hfd //隐式类 //任务&#xff1a;给之前的BaseUser添加新的功能&#xff0c;但是不要直接去改代码 //思路&#xff1a;把BaseUser通过隐式转换&#xff0c;改成一个新类型&#xff0c;而这个新类型中有这新的方法 //implicit class一个隐式转换函数类 //作用&#xff1…...

Jenkins流水线初体验(六)

DevOps之安装和配置 Jenkins (一) DevOps 之 CI/CD入门操作 (二) Sonar Qube介绍和安装(三) Harbor镜像仓库介绍&安装 (四) Jenkins容器使用宿主机Docker(五) Jenkins流水线初体验(六) 一、Jenkins流水线任务介绍 之前采用Jenkins的自由风格构建的项目,每个步骤…...