vite中的env环境变量

news2024/12/27 11:28:22

一、vite中使用env环境变量基本介绍

Vite 是一种现代化的前端构建工具,旨在提供快速的开发和构建体验。在 Vite 中,env 环境变量是一种用于在项目中设置和访问全局变量的机制。通过 env 变量,可以在不同环境下配置不同的参数,实现不同环境间的差异化行为

1. 在vite项目中访问环境变量(import.meta.env)

可以直接在代码中通过import.meta.env来访问,无需安装和配置任何插件
例如我们在开发环境下打印

console.log(import.meta.env)

打印结果:
在这里插入图片描述

import.meta.env自带属性介绍

默认属性

  • import.meta.env.MODE: 当前构建模式,可以是"development"、"production"或"test"之一。
  • mport.meta.env.BASE_URL: 当前项目的基准URL。
  • import.meta.env.PROD: 一个布尔值,表示当前是否处于生产模式。
  • import.meta.env.DEV: 一个布尔值,表示当前是否处于开发模式。

2. env 环境变量的作用

使用 env 环境变量可以有以下几个方面的作用

  1. 环境切换:通过使用不同的 env 变量,可以方便地在开发、测试和生产环境之间切换。比如,在开发环境中可以设置一些用于调试的参数,而在生产环境中可以设置一些用于性能优化或日志记录的参数。

  2. 配置管理:通过env 变量,可以将项目中的配置从代码中分离出来,便于管理和维护。比如,可以将敏感信息(例如API密钥)放在 env变量中,避免将其硬编码在代码中。

  3. 差异化功能:根据不同的 env 变量,可以在不同环境下启用或禁用一些功能。比如,在测试环境中可以开启一些调试工具或模拟数据,而在生产环境中可以禁用这些功能。
    在Vite中,import.meta.env是一个全局变量,用于访问环境变量。它提供了一些默认属性来获取关于当前环境的信息。

  4. 简化环境变量配置:在使用Vite开发时,开发和生产环境的配置文件可以使用不同的环境变量,在代码中通过import.meta.env来访问这些变量,不需要额外配置webpack插件或使用process.env来获取环境变量。

3. 举例分析说明

下面通过几个示例来说明env环境变量的使用:

  1. 根据环境切换 API 地址:
const apiUrl = import.meta.env.MODE === 'production'
  ? 'https://api.example.com'
  : 'http://localhost:8080';

在开发环境中,API 地址会指向本地的开发服务器,而在生产环境中,API 地址会指向线上的服务器。

  1. 配置管理:
const apiKey = import.meta.env.VITE_API_KEY;
const apiSecret = import.meta.env.VITE_API_SECRET;

??? what?
import.meta.env.VITE_API_KEY这是什么东西?上面介绍末的默认属性没有’VITE_API_KEY’这玩意啊,
这个其实是我们自定义的环境变量,如何自定义下面有介绍哦,

通过在 env 变量中设置 API 密钥和密钥,可以将其从代码中分离出来,防止意外暴露敏感信息。

  1. 差异化功能:
if (import.meta.env.MODE === 'development') {
  // 启用调试工具
  enableDebugTool();
}

if (import.meta.env.MODE === 'production') {
  // 禁用某些功能
  disableFeatureX();
}

根据不同的环境,启用或禁用不同的功能,保证项目在不同环境下的正确运行。

二、自定义import.meta.env属性

在Vite项目中,可以通过自定义开发环境和生产环境的配置,来使用import.meta.env属性来获取环境变量。

以下是两种常见的方式:

  1. 使用.env文件:
  • 在项目的根目录下新建.env文件,并根据需要定义环境变量,格式为变量名=值
  • 在代码中使用import.meta.env来访问环境变量。

例如,在.env文件中定义一个环境变量API_URL

API_URL=https://api.example.com

然后在代码中使用import.meta.env.VITE_API_URL来访问该环境变量:

const apiUrl = import.meta.env.VITE_API_URL;
console.log(apiUrl); // 输出:https://api.example.com
  1. 使用scripts中的配置:
  • package.json文件中的scripts中添加自定义环境变量的配置。
  • 在代码中使用import.meta.env来访问环境变量。

例如,在package.json中添加一个development脚本,并定义一个环境变量API_URL

{
  "scripts": {
    "development": "API_URL=https://api.example.com vite"
  }
}

然后在代码中使用import.meta.env.VITE_API_URL来访问该环境变量:

const apiUrl = import.meta.env.VITE_API_URL;
console.log(apiUrl); // 输出:https://api.example.com

这样,在执行npm run development时,Vite将使用该配置来启动开发环境,并将环境变量传递给代码使用。

三、.env、.env.development、.env.production配置文件地作用详解

Vite项目中,env、.env.development、.env.production文件用于配置环境变量和其他敏感信息,以便在开发和生产环境中使用不同的配置

1. .env文件

这是默认的环境配置文件,适用于所有环境。其中的变量在开发和生产环境中都能够访问到。一般用于存储公共的配置信息,比如一些秘钥信息,如地图的key值。

例如,假设我们在.env文件中定义了以下变量:

VITE_APP_NAME=My App
VITE_API_URL=https://api.example.com

在项目的任何地方,通过import.meta.env可以访问这些变量:

console.log(import.meta.env.VITE_APP_NAME); // 输出:My App
console.log(import.meta.env.VITE_API_URL); // 输出:https://api.example.com

2. .env.development文件

这个文件仅在开发环境中生效。

npm run dev

在开发过程中,可以在该文件中定义开发特定的配置项。开发环境中的配置可以覆盖默认的.env文件中的配置

例如,假设我们在.env.development文件中定义了以下变量:

VITE_LOG_LEVEL=debug
VITE_API_HOST=localhost

在开发环境中,这些变量会覆盖.env文件中的同名变量值:

console.log(import.meta.env.VITE_LOG_LEVEL); // 输出:debug
console.log(import.meta.env.VITE_API_HOST); // 输出:localhost

3. .env.production文件

这个文件仅在生产环境中生效。

npm run build

在部署项目到生产环境时,可以在该文件中定义生产环境特定的配置项。生产环境中的配置可以覆盖默认的.env文件中的配置

例如,假设我们在.env.production文件中定义了以下变量:

VITE_LOG_LEVEL=info
VITE_API_HOST=api.example.com

在生产环境中,这些变量会覆盖.env文件中的同名变量值:

console.log(import.meta.env.VITE_LOG_LEVEL); // 输出:info
console.log(import.meta.env.VITE_API_HOST); // 输出:api.example.com

使用这些环境配置文件,可以根据不同环境的需求来管理和修改配置项,以便在不同环境中使用不同的配置。这样可以更好地保护敏感数据,同时提供更大的灵活性和可配置性。

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

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

相关文章

时间序列分解 | Matlab 互补集合经验模态分解(CEEMD)的信号分解

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列分解 | Matlab 互补集合经验模态分解(CEEMD)的信号分解 部分源码 %---------------------

Java基础---为什么不能用浮点数表示金额

目录 缘由 十进制转二进制 不是所有数都能用二进制表示 IEEE 754 避免精度丢失 缘由 因为不是所有的小数都能用二进制表示,所以,为了解决这个问题,IEEE提出了一种使用近似值表示小数的方式,并且引入了精度的概念这就是我们所…

Docker部署.Net7.0

1、新建项目 勾选启用Docker,会自动生成Dockerfile文件 2、生成镜像 打开PowerShell 进入项目解决方案目录路径 把项目打包成镜像 //镜像名称net7. 注意镜像名称后面的空格和点符号必须有docker build -t net7.0 .打包完成后可以看到项目的镜像 3、创建容器并启动 //…

C++文件操作 - 写操作----简单示例

C文件操作 - 写操作 一、什么是文件 内存中存放的数据在计算机关机后就会消失。要长久保存数据,就要使用硬盘、光盘、U盘等设备。为了便于数据的管理和检索,引入了“文件”的概念。 一篇文章、一段视频、一个可执行程序,都可以被保存为一个文…

BeanShell:多线程环境下Interpreter解释器的优化使用

BeanShell是用 Java 编写的一个小型、免费、可嵌入的 Java 代码的脚本解释器。 BeanShell动态执行标准Java语法,并使用通用语法对其进行扩展 脚本编写便利性,适用于 Java 的轻量级脚本。本文说明在并发环境下对BeanShell更加优化的使用方式。 简单示例 …

geoserver加载arcgis server瓦片地图显示异常问题处理

1.全能地图下载的瓦片conf.xml格式有问题首先要修改格式&#xff0c;conf.cdi文件也需要修改格式&#xff0c;修改为UTF-8或者UTF-8无BOM编码(不同的notepadd显示不同) 2. 下载的conf.xml坐标系默认从最小级别开始&#xff0c;一定要把前几级也补全&#xff0c;从0级开始 <L…

diffusion model

(正课)Diffusion Model 原理剖析 (1_4) (optional)_哔哩哔哩_bilibili(正课)Diffusion Model 原理剖析 (1_4) (optional)是【授权】李宏毅2023春机器学习课程的第42集视频&#xff0c;该合集共计64集&#xff0c;视频收藏或关注UP主&#xff0c;及时了解更多相关视频内容。http…

高中学习3大主流国际课程-申请国外大学本科

目录 作用 3大主流国际课程是什么 A-Level AP课程 IB 3大主流国际课程对比 作用 帮助学生申请国外大学本科。 如果能够选择到适合的国际课程&#xff0c;未来的留学规划就相当于成功了一半 3大主流国际课程是什么 A-Level、AP、IB三大国际课程 A-Level A-Level课程&a…

Kali Linux基础使用

Kali Linux基础使用 一、搭建渗透测试攻击环境1.1、Vmware workstation1.2、下载与安装1.3、安装渗透攻击机1.3.1、配置root用户登录1.3.2、普通用户切换到root用户1.3.3、修改kali语言1.3.4、网络配置1.3.4.1、桥接网络1.3.4.2、NAT1.3.4.3、仅主机 1.4、编辑网络文件 二、Lin…

05 - C++学习笔记: 一维数组和多维数组

数组是一种非常重要的数据结构&#xff0c;它允许用连续的方式存储和访问一组相同类型的数据。无论是存储学生成绩、处理图像数据还是解决复杂的数学问题&#xff0c;数组都发挥着重要的作用。 1️⃣ 一维数组的定义与引用 ✨ 倒序输出 在C中&#xff0c;一维数组是一种存储…

阿斯巴甜再亮红灯,配料表“瘦身”成趋势

【潮汐商业评论/原创】 6月以来&#xff0c;北方大部分地区出现近40度的高温天气&#xff0c;北京更是多年不遇的发布高温红色预警&#xff0c;酷暑难耐的Allen发现自己今年在水饮的消耗比往年高了好几倍&#xff0c;每天最快乐的时候莫过于一罐冰镇可乐&#xff0c;一口下去仿…

C/C++开发,opencv基于FileStorage读写文件介绍及示例

目录 一、FileStorage类 1.1 FileStorage类说明 1.2 FileStorage类写入说明 1.3 FileStorage类读取说明 二、FileStorage类应用示例 2.1 应用代码 2.2 工程组织&#xff08;Makefile&#xff09; 2.3 编译及测试 一、FileStorage类 1.1 FileStorage类说明 FileStorage类在ope…

6.S081——并发与锁部分(自旋锁的实现)——xv6源码完全解析系列(9)

0.briefly speaking 并发(Concurrency)指的是在多处理器系统(multiprocessor)中的并行&#xff0c;线程切换和中断导致的多个指令流交互错杂的情况&#xff0c;再和现代处理器体系结构中的多发射、乱序执行、Cache一致性等话题结合起来&#xff0c;这几乎变成了一个相当相当复…

装饰器设计模式应⽤-JDK源码⾥⾯的Stream IO流

装饰器设计模式在JDK源码⾥⾯应⽤场景 抽象组件&#xff08;Component&#xff09;&#xff1a;InputStream 定义装饰⽅法的规范被装饰者&#xff08;ConcreteComponent) : FileInputStream、ByteArrayInputStream Component的具体实现&#xff0c;也就是我们要装饰的具体对…

09-属性描述符Object.getOwnPropertyDescriptor(),原始数据不可重写

把原始数据作为属性值传入新对象中&#xff0c;发生原始数据修改丢失的问题怎么办&#xff1f; 应该使用Object.defineProperty()设置该属性用Object.defineProperty()设置的属性&#xff0c;默认writable、enumerable、configurable均为false并且自定义提醒该属性设置了不可重…

掌握Python的X篇_6_常量与变量、常见运算符、字符型变量

文章目录 1. 常量与变量1.1 常量与变量定义1.2 数字型变量 2. 常见运算符3. 字符型变量( 字符 )3.1 字符串变量的格式化 1. 常量与变量 简单理解&#xff0c;直接使用的数据&#xff0c;就是常量&#xff0c;最常见的常量有数字和字符串 采用ipython进行交互式编程 1.1 常量…

5.1阻塞和非阻塞、同步和异步 5.2Unix、Linux上的五种IO模型

5.1阻塞和非阻塞、同步和异步 典型的一次IO的两个阶段是什么&#xff1f;数据就绪和数据读写 数据就绪&#xff1a;根据IO操作的就绪状态 阻塞非阻塞 数据读写&#xff1a;根据应用程序和内核的交互方式 同步异步 陈硕&#xff1a;在处理IO的时候&#xff0c;阻塞和非阻塞都…

FPGA时序约束--实战篇(时序收敛优化)

目录 一、模块运行时钟频率 二、HDL代码 1、HDL代码风格 2、HDL代码逻辑优化 三、组合逻辑层数 1、插入寄存器 2、逻辑展平设计 3、防止变量被优化 四、高扇出 1、使用max_fanout 2、复位信号高扇出 五、资源消耗 1、优化代码逻辑&#xff0c;减少资源消耗。 2、…

基于图层自动识别算法在CAD图纸基础上快速创建Revit BIM模型 - VS2022 + AutoCAD2024 + ObjectARX环境搭建

引言 CAD 技术将建筑师、工程师们从手工绘图推向计算机辅助制图&#xff0c;实现了工程设计领域的第一次信息革命。从 CAD 技术普及以来&#xff0c;设计成果一般都是 CAD 图纸形式表达。但是近些年来&#xff0c;随着建筑的复杂程度日益增加&#xff0c;专业间的配合更加紧密…

行业观察 | 芯片设计产业链:上游至下游

本文简单总结、介绍芯片设计产业链全流程。 更新&#xff1a;2023 / 7 / 2 文章目录 集成电路产业链常见的芯片架构图数字IC设计流程概略版详解版前后端前端&#xff1a;RTL -> Netlist后端&#xff1a;Netlist -> Layout 示例&#xff1a;基于标准单元&#xff08;STD …