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

news2024/11/19 3:20:22

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

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/, '') // 重写路径
        }
      },
    },
  }
})

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

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

相关文章

【工具插件类教学】在 Unity 中使用 iTextSharp 实现 PDF 文件生成与导出

目录 一、准备工作 1. 安装 iTextSharp 2. 准备资源文件 二、创建 ExportPDFTool 脚本 1、初始化 PDF 文件,设置字体 2、添加标题、内容、表格和图片 三、使用工具类生成 PDF 四、源码地址 在 Unity 项目中,我们有时会需要生成带有文本、表格和图片的 PDF 文件,以便…

【AlphaFold3】开源本地的安装及使用

文章目录 安装安装DockerInstalling Docker on Host启用Rootless Docker 安装 GPU 支持安装 NVIDIA 驱动程序安装 NVIDIA 对 Docker 的支持 获取 AlphaFold 3 源代码获取基因数据库获取模型参数构建将运行 AlphaFold 3 的 Docker 容器 参考 AlphaFold3: https://github.com/goo…

[JAVA]MyBatis框架—获取SqlSession对象

SqlSessionFactory作为MyBatis框架的核心接口有三大特性 SqlSessionFactory是MyBatis的核心对象 用于初始化MyBatis,创建SqlSession对象 保证SqlSessionFactory在应用中全局唯一 1.SqlSessionFactory是MyBatis的核心对象 假设我们要查询数据库的用户信息&#x…

ArkTS学习笔记:ArkTS起步

ArkTS是HarmonyOS的主力应用开发语言,基于TypeScript扩展,强化了静态检查和分析,旨在提升程序稳定性和性能。它采用静态类型,禁止运行时改变对象布局,并对UI开发框架能力进行扩展,支持声明式UI描述和自定义…

JAVA 之 JDBC

JDBC概述 基本介绍 1.JDBC为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题。 2.Java程序员使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统,从而完成对数据库的各种操作。 3.JDBC的基本原理[ 重要 ] 4.模拟JDBC com.lmbc.myjdbc…

用 Python 从零开始创建神经网络(五):损失函数(Loss Functions)计算网络误差

用损失函数(Loss Functions)计算网络误差 引言1. 分类交叉熵损失(Categorical Cross-Entropy Loss)2. 分类交叉熵损失类(The Categorical Cross-Entropy Loss Class)展示到目前为止的所有代码3. 准确率计算…

Redis做分布式锁

(一)为什么要有分布式锁以及本质 在一个分布式的系统中,会涉及到多个客户端访问同一个公共资源的问题,这时候我们就需要通过锁来做互斥控制,来避免类似于线程安全的问题 因为我们学过的sychronized只能对线程加锁&…

阿里云引领智算集群网络架构的新一轮变革

阿里云引领智算集群网络架构的新一轮变革 云布道师 11 月 8 日~ 10 日在江苏张家港召开的 CCF ChinaNet(即中国网络大会)上,众多院士、教授和业界技术领袖齐聚一堂,畅谈网络未来的发展方向,聚焦智算集群网络的创新变…

预处理(1)(手绘)

大家好,今天给大家分享一下编译器预处理阶段,那么我们来看看。 上面是一些预处理阶段的知识,那么明天给大家讲讲宏吧。 今天分享就到这里,谢谢大家!!

ZYNQ程序固化——ZYNQ学习笔记7

一、ZYNQ启动过程 二、 SD卡启动实操 1、对ZYNQ进行配置添加Flash 2、添加SD卡 3、重新生成硬件信息 4、创建vitis工程文件 5、勾选板级支持包 6、对系统工程进行整体编译,生成两个Debug文件,如图所示。 7、插入SD卡,格式化为 8、考入BOOT.…

FPGA实现PCIE采集电脑端视频转SFP光口万兆UDP输出,基于XDMA+GTX架构,提供2套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案10G Ethernet Subsystem实现万兆以太网物理层方案 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图电脑端视频PCIE视频采集QT上位机XDMA配置及使用XDMA中断模块FDMA图像缓存UDP视频组包发送UDP协议栈MAC…

Mongo数据库集群搭建

目录 1、Mongo集群优势 1.1 高可用性 1.2 水平扩展性 1.3 高性能 1.4 灵活的架构设计 1.5 数据安全 1.6 管理与监控 2、下载指定操作系统版本包 3、部署和验证工作 3.1 准备配置文件及依赖 3.2 启动第一个节点 3.3 部署更多的节点 3.4 初始化副本集 3.5 设置管理…

创建vue3项目步骤

脚手架创建项目: pnpm create vue Cd 项目名称安装依赖:Pnpm iPnpm Lint:修复所有文件风格 ,不然eslint语法警告报错要双引号Pnpm dev启动项目 拦截错误代码提交到git仓库:提交前做代码检查 pnpm dlx husky-in…

C语言项⽬实践-贪吃蛇

目录 1.项目要点 2.窗口设置 2.1mode命令 2.2title命令 2.3system函数 2.Win32 API 2.1 COORD 2.2 GetStdHandle 2.3 CONSOLE_CURSOR_INFO 2.4 GetConsoleCursorInfo 2.5 SetConsoleCursorInfo 2.5 SetConsoleCursorPosition 2.7 GetAsyncKeyState 3.贪吃蛇游戏设…

nfs服务器--RHCE

一,简介 NFS(Network File System,网络文件系统)是FreeBSD支持的文件系统中的一种,它允许网络中的计 算机(不同的计算机、不同的操作系统)之间通过TCP/IP网络共享资源,主要在unix系…

自动化运维(k8s):一键获取指定命名空间镜像包脚本

前言:脚本写成并非一蹴而就,需要不断的调式和修改,这里也是改到了7版本才在 生产环境 中验证成功。 该命令 和 脚本适用于以下场景:在某些项目中,由于特定的安全或政策要求,不允许连接到你的镜像仓库。然而…

HuggingFace:基于YOLOv8的人脸检测模型

个人操作经验总结 1、YOLO的环境配置 github 不论base环境版本如何,建议在conda的虚拟环境中安装 1.1、创建虚拟环境 conda create -n yolov8-face python3.9conda create :创建conda虚拟环境, -n :给虚拟环境命名的…

Unet++改进28:添加PPA(2024最新改进方法)|多分支特征提取策略,捕获不同尺度和层次的特征信息。

本文内容:添加PPA 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 红外小目标检测是一项重要的计算机视觉任务,涉及对红外图像中通常只有几个像素的微小目标进行识别和定位。然而,由于红外图像中物体的体积小,背景一般比较复杂,这给红外图像的识别带来…

CTF攻防世界小白刷题自学笔记13

1.fileinclude,难度:1,方向:Web 题目来源:宜兴网信办 题目描述:无 给一下题目链接:攻防世界Web方向新手模式第16题。 打开一看给了很多提示,什么language在index.php的第九行,flag在flag.php中,但事情显…

同三维T610UDP-4K60 4K60 DP或HDMI或手机信号采集卡

1路DP/HDMI/TYPE-C(手机/平板等)视频信号输入1路MIC1路LINE OUT,带1路HDMI环出,USB免驱,分辨率4K60,可采集3路信号中其中1路,按钮切换,可采集带TYPE-C接口的各品牌手机/平板/笔记本电脑等 同三维…