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

news/2024/11/18 12:28:07/

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

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.ppmy.cn/news/1547981.html

相关文章

高级 SQL 技巧讲解

​ 大家好,我是程序员小羊! 前言: SQL(结构化查询语言)是管理和操作数据库的核心工具。从基本的查询语句到复杂的数据处理,掌握高级 SQL 技巧不仅能显著提高数据分析的效率,还能解决业务中的复…

基于Java Springboot二手家电管理平台

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…

React Native 全栈开发实战班 -原生功能集成之相机与图片

在移动应用中,相机功能 和 图片选择 是非常常见的需求,用户可以通过相机拍照或从相册中选择图片。React Native 提供了多种方式来实现相机和图片选择功能,包括使用第三方库(如 react-native-image-picker)和调用原生模…

STM32设计学生宿舍监测控制系统

目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 电路图采用Altium Designer进行设计: 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 随着科技的飞速发展和智能化时代的到来,学生宿舍的安全、舒适…

2024年09月CCF-GESP编程能力等级认证Python编程四级真题解析

本文收录于专栏《Python等级认证CCF-GESP真题解析》,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 据有关资料,山东大学于1972年研制成功DJL-1计算机,并于1973年投入运行,其综合性能居当时全国第三位。DJL-1计算机运算控…

【Docker】Docker Compose部署单节点多容器应用

文章目录 一. Docker Compose 的能力二. 部署博客系统(博客mysql)1. docker命令部署2. Compose文件部署多应用 三. Docker Compose使用讲解1. 文件语法2. 启动compose3. 停止应用4. 其他命令 四. 常用命令 一. Docker Compose 的能力 Docker Compose 通…

C++初阶学习第十一弹——list的用法和模拟实现

一、list的使用 list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向 其前一个元素和后一个元素。 常见的list的函数的使用 std::list<int> It {1, 2, 3, 4, 5};通过迭代器访问元素&#xff1a; std:…

这段时间 `weapp-vite` 的功能更新与优化

这段时间 weapp-vite 的功能更新与优化 自从上次宣布 weapp-vite 的发布&#xff0c;已经过去三个月&#xff1b;weapp-vite 也逐渐迭代至 1.7.6 版本。 在此期间&#xff0c;我对其进行了多项功能的增强和优化&#xff0c;接下来我将为大家详细介绍近期的阶段性成果。 下面列…