vite配置之获取.env.[mode]下的数据

需求

  • vite.config.ts获取配置文件下面的数据
  • .vue,.ts,.tsxsrc文件夹下面获取配置文件下面的数据

一、src/* .vue,.ts,.tsx 文件夹下面使用环境变量

之前webpack或者用的vue-cli我们在获取配置文件数据的时候通过process.env,但是在vite里面不能通过这种方式

vite需要通过import.meta.env.xxx,官方文档有说明,下面是vite内置的几个
在这里插入图片描述
但是实际的开发当中,我们还需要增加一些自定义的字段,如VITE_BASE_URL请求的url
这个时候我们可以在根目录下面新建一个.env.xxx文件,写入下面内容

VITE_BASE_URL = http://www.xxx.com

然后在我们的axios配置里面使用
在这里插入图片描述
这样是我完全没有问题的,假设我们是使用ts来开发的项目,我们就会发现,我们自定的字段ts并没有给我们有好的提示
在这里插入图片描述
虽然也可以用,但是我都用ts,你凭什么不给我提示?

其实关于配置文件里面自定义的字段,要想有提示官方给了一个明确的说明
在这里插入图片描述

所以我们可以新增一个.env.d.ts文件,然后把我们自定义的字段配置进接口即可,至于这个文件你想都放到哪个位置,具体还是要看tsconfig.json里面includes字段的配置
在这里插入图片描述

这个时候我们在使用的时候,就可以让vscode给我们有好的提示
在这里插入图片描述

二、vite.config.ts配置文件里面使用

在这里插入图片描述
官方文档有明确的说明,也就是说我们要想在vite.config.ts中去使用.env文件中的字段,我们需要使用loadEnv

import { defineConfig, loadEnv } from 'vite'export default defineConfig(({ command, mode }) => {// 根据当前工作目录中的 `mode` 加载 .env 文件// 设置第三个参数为 '' 来加载所有环境变量,而不管是否有 `VITE_` 前缀。const env = loadEnv(mode, process.cwd(), '')return {server: {host: '0.0.0.0',port: 2233,proxy: {'/api/': {target: env.VITE_PROXY_URL,ws: false,changeOrigin: true,rewrite: path => path.replace('/api', ''),},},},}
})

三、如何优雅的处理多个.env文件

如果我们的项目上线的环境比较多,或者再开发对接的时候要配置不同的环境,如

.env.dev
.env.test
.env.prod
.env.zhangsan
.env.lisi
.env.xxx

本身我们现在工程化开发的规范下,我们的根目录就会有了一堆的配置文件
在这里插入图片描述
这个时候我们再加一堆的.env文件配置就会显得混乱,所以有没有一种方案就是我们所有的.env文件放到一个叫env的文件夹下面呢?

在vite配置里面,有一个属性叫envDir
在这里插入图片描述
也就是说我们可以配置这个字段,让vite能够识别我们在env文件夹下面配置的文件,具体配置如下:
在这里插入图片描述
配置的时候注意一点,就是loadEnv的第二个参数,读取的路径要跟envDir路径一致

比如说我们在env文件夹下面新建了一个.env.test文件,并定义了一个VITE_PROXY_URL字段,用于跟不同的服务对接的时候处理跨域问题去做代理
在这里插入图片描述
然后我们还想在启动项目的时候通过命令去做一个区分,我们可以在package.json文件下的scripts里面新增

"dev:test": "vite --mode test"

这个时候我们在vite.config.ts中打印看一下
在这里插入图片描述
我们可以看到右侧终端中输出了test { VITE_PROXY_URL: 'http://xxx' }

这个时候我们在.env.test里面在新增一个字段VITE_APP_TITLE,可以看到

在这里插入图片描述
关于loadEnv参数

  • 第一个参数 mode vite --mode test 默认是development ,如果是运行打包命令的话默认就是production
  • 第二个参数 .env配置文件所在的路径,这个要根据envDir来,默认是根路径
  • 第三个参数 就是过滤以xxx开头的字段,默认是VITE_,如果是''空字符,就是获取全部

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

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

相关文章

Redis作者长文总结LLMs, 能够取代99%的程序员

引言 这篇文章并不是对大型语言模型(LLMs)的全面回顾。很明显,2023年对人工智能而言是特别的一年,但再次强调这一点似乎毫无意义。相反,这篇文章旨在作为一个程序员个人的见证。自从ChatGPT问世,以及后来使…

保姆级pycharm远程连接linux服务器

1、登录服务器,创建账号。 一般都是管理员账户登录,创建自己的账号。如果不需要,可跳过这步。 打开MobaXterm,点击左上角Session创建会话。 再点击左上角SSH,分别输入服务器ip和账号,最后点ok,进…

有声读物管理平台Booksonic-Air

老苏最近在听评书,所以想找个软件来管理和收听,找了一圈,感觉 Booksonic-Air 可能能满足老苏的需求。 什么是 Booksonic-Air ? Booksonic-Air 是一个用于流式传输有声读物的服务器,是原始 Booksonic 服务器的后继者。…

linux在文件夹中查找文件内容

linux在文件夹中查找文件内容 在Linux中,可以通过以下多个途径,在文件夹中查找文件内容: 1、使用grep命令: grep -r "要查找的内容" /path/to/folder-r参数表示递归地在文件夹及其子文件夹中搜索。/path/to/folder是要搜索的文件夹路径。2、使用ack命令 ack …

通过Vue3+高德地图的JS API实现市区地图渲染

效果图: 核心代码: <script setup>import { onMounted, onUnmounted } from vue;import AMapLoader from @amap/amap-jsapi-loader;import { message } from ant-design-vue;import school from @/assets/icons/school.svg;import enterprise from @/assets/icons/ent…

【Prometheus】自动化效率脚本

定义ip列表文件 cat ip_list.tx ##按照这个格式定义多个ip 192.168.1.1 192.168.1.2 脚本1 &#xff1a;一键telnet ip列表的9100端口可达性 # cat telnet.sh #!/bin/bash# Set the file name filename"ip_list.txt"# Read the file content into a variable ip_l…

英特尔 “AI” 科通:英特尔AI大模型应用前瞻

亲爱的科技探险家、前沿探索者、对未来深具好奇心的您&#xff0c; 身处人工智能引领的时代&#xff0c;我们目睹着行业的革命性变革。技术的创新不仅改变着我们的日常&#xff0c;更重新定义着我们对未来的期许。今天&#xff0c;怀着无限激情和期待&#xff0c;我们邀请您参…

SHH远程管理

4.1SHH远程管理 SSH是一种安全通道协议&#xff0c;主要用来实现字符界面的远程登录&#xff0c;远程复制等功能。 4.1.1配置OpenSSH服务器 在 CentOS 7.3 系统中&#xff0c;OpenSSH 服务器由 openssh、openssh-server 等软件包提供(默认已安装)&#xff0c;并已将 sshd 添…

Java多线程设计模式之保护性暂挂模式

模式简介 多线程编程中&#xff0c;为了提高并发性&#xff0c;往往将一个任务分解为不同的部分。将其交由不同的线程来执行。这些线程间相互协作时&#xff0c;仍然可能会出现一个线程等待另一个线程完成一定的操作&#xff0c;其自身才能继续运行的情形。 保护性暂挂模式&a…

Circle FFT in the Plonky3

传统的STARK系统需要在域中具有平滑阶数的循环群。如此&#xff0c;可以通过采用快速傅里叶变换&#xff08;FFT&#xff09;算法高效的计算多项式的插值点&#xff0c;并在相邻行中加入约束。对于具有阶数为 n n n 单位根的有限域 F p \mathbb{F}_p Fp​&#xff0c;对于很多…

【代码随想录算法训练营第四十天|卡码网46.携带研究材料,416.分割等和子集】

文章目录 卡码网46.携带研究材料二维dp数组一维dp数组&#xff08;滚动数组&#xff09; 416.分割等和子集 卡码网46.携带研究材料 这题是01背包问题。 二维dp数组 dp数组[i][j]前一位表示的是物品的种类&#xff0c;后一位表示的是背包的容量&#xff0c;在物体为i时&#…

Android Room数据库使用介绍

1.简介 Room是Google提供的Android架构组件之一&#xff0c;旨在简化数据库操作。它是SQLite的一个抽象层&#xff0c;提供了更易用和安全的API。 Room的总体架构: 2.Room数据库的基础概念 Entity Entity是Room中的数据表&#xff0c;每个Entity类对应一个SQLite表。 DAO …

研发团队的「技术债」如何进行量化管理?

我共事过的每个团队都会讨论技术债。有些团队知道如何管理它&#xff0c;也有些团队因此崩溃瘫痪&#xff0c;甚至有一家公司因为技术债务没有得到解决而宣告失败。 什么是技术债务&#xff1f; 「债务」这个比喻非常恰当。最早提出「技术债务 Technical Debt」比喻的工程师 W…

Linux(Centos7)OpenSSH漏洞修复,升级最新openssh-9.7p1

OpenSSH更新 一、OpenSSH漏洞二、安装zlib三、安装OpenSSL四、安装OpenSSH 一、OpenSSH漏洞 服务器被扫描出了漏洞需要修复&#xff0c;准备升级为最新openssh服务 1. 使用ssh -v查看本机ssh服务版本号 ssh -V虚拟机为OpenSSH7.4p1&#xff0c;现在准备升级为OpenSSH9.7p1…

Centos7 安装oracle 11.2.0.4

荆轲刺秦王 1. 准备工作 需要下载 Oracle 11g 安装包 2.HostName修改&#xff1a; hostnamectl set-hostname oracle 3. 配置hostname&#xff08;本机IP映射&#xff09;注意&#xff1a;192.168.116.129 需要换乘本地ip vi /etc/hosts 192.168.116.129 oracle # 测试hos…

创新实训2024.06.17日志:大模型微调总结

前段时间其实我们已经部署了大模型&#xff0c;并开放了对外的web接口。不过由于之前某几轮微调实验的大模型在对话时会有异常表现&#xff08;例如响应难以被理解&#xff09;&#xff0c;因此我在项目上线后&#xff0c;监控了数据库里存储的对话记录。确定了最近一段时间部署…

docker部署prometheus

1.拉取镜像 docker pull prom/prometheus2.创建配置文件 cd /root/prometheus touch prometheus.yml touch first_rules.yml3.配置文件内容 prometheus.yml文件内容 # my global config global:scrape_interval: 15s # Set the scrape interval to every 15 seconds. Defau…

Docker的常见问题

1.容器启动失败 检查映像&#xff1a;运行 docker images 确认所需映像存在。检查Dockerfile&#xff1a;验证Dockerfile中的指令无误。查看日志&#xff1a;使用 docker logs <container_id> 查找启动失败的具体原因。资源检查&#xff1a;运行 docker info 或 docker …

基 CanMV 的 C 开发环境搭建

不论是使用 CanMV 提供的基于 C 语言和 FreeRTOS 的应用开发方式开发应用程序或是编译 CanMV 固件&#xff0c;都需要搭建基于 CanMV 的 C 开发环境&#xff0c;用于编译 CanMV 源码。 1. 开发环境搭建说明 CanMV 提供了基于 C 语言和 FreeRTOS 的应用开发…

模拟面试三

1. 你能介绍一下什么是微服务架构&#xff1f; 答案&#xff1a;微服务架构是一种软件开发方法&#xff0c;将一个应用程序拆分成一系列小型、自治、可独立运行的服务&#xff0c;每个服务都专注于完成一个特定的业务功能&#xff0c;并通过轻量级的通信机制进行互联。 2. 你…