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

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_,如果是''空字符,就是获取全部

相关文章:

  • linux 安装sftp及使用sftp上传和下载
  • NVIDIA发布Nemotron-4 340B 用于生成高质量的合成数据
  • GitHub项目里的api
  • Excel小技巧| 批量多列多行转为一列
  • 系统架构设计师【论文-2017年 试题2】: 论软件架构风格(包括写作要点和经典范文)
  • 外观缺陷检测原理
  • vue3+vite+ts 使用webrtc-streamer播放海康rtsp监控视频
  • C++面经
  • C# list 成员对象是int型存在堆区还是栈区
  • 机器学习——集成学习和梯度提升决策树
  • C#中[StructLayout(LayoutKind.Sequential, Pack = 1)]解释
  • C++ 58 之 计算器案例
  • 模板方法模式(大话设计模式)C/C++版本
  • Python:基础爬虫
  • 【odoo17】富文本小部件widget=“html“的使用
  • [译]前端离线指南(上)
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • canvas 高仿 Apple Watch 表盘
  • express + mock 让前后台并行开发
  • HTTP那些事
  • Java|序列化异常StreamCorruptedException的解决方法
  • Java超时控制的实现
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • scala基础语法(二)
  • session共享问题解决方案
  • Webpack 4 学习01(基础配置)
  • 多线程事务回滚
  • 警报:线上事故之CountDownLatch的威力
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 前端相关框架总和
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 微服务入门【系列视频课程】
  • Java性能优化之JVM GC(垃圾回收机制)
  • 阿里云ACE认证学习知识点梳理
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​secrets --- 生成管理密码的安全随机数​
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #100天计划# 2013年9月29日
  • #include<初见C语言之指针(5)>
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (3)llvm ir转换过程
  • (3)选择元素——(17)练习(Exercises)
  • (a /b)*c的值
  • (C语言)fread与fwrite详解
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (层次遍历)104. 二叉树的最大深度
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原)本想说脏话,奈何已放下
  • (正则)提取页面里的img标签
  • (转) 深度模型优化性能 调参