vite环境变量配置

简介: vite环境变量配置

环境变量就是会根据当前的代码环境变化的变量叫做环境变量。

我们在项目中的代码环境大致分为下面几种:

1、开发环境

2、测试环境

3、预发布环境

4、灰度环境

5、生产环境

我们在项目中通常需要区分线上环境和开发环境的后端地址,例如:

开发环境:http://dev.api/
生产环境:https://api/

我们每次在开发的时候都要区分confug.url的地址,如果测试的时候忘改地址了,地址是线上地址,那就会出大问题,测试数据直接影响到线上了。

我们在使用一些第三方sdk:百度地图sdk、小程序sdk等第三方sdk接口的时,需要带上身份信息APP_KEY,测试环境、生产环境、开发环境是不一样的key,例如这里的三种开发环境对应的不同sdk

  • 开发环境:110
  • 测试环境:111
  • 生产环境:112

假设现在是开发环境,APP_KEY为110,这里模拟一个axios请求:

// request.js
const getUserInfo = () => {
   axios.post({
     params : {
        APP_KEY : 110  // 开发环境的APP_KEY : 110
     }
   })
}

如果我们切换到生产环境,这里的APP_KEY需要换成112,如果切到测试环境,APP_KEY要换成111,这种手动更换是非常麻烦的。

所以我们这里需要区分一下生产环境和开发环境

新建两个文件:

.env.development 开发和测试环境

.env.production 生产环境

// .env.development 
APP_KEY = 110 
BASE_URL = http://test.api/
• 1
• 2
• 3
// .env.production
APP_KEY = 112
BASE_URL = http://api/
• 1
• 2
• 3

我们在运行npm run dev的时候,希望上面的asiox的请求读的是.env.development 文件中的APP_KEY,运行npm run build的时候,希望asiox的请求读的是.env.production中的APP_KEY,并且对应的axios.basu_url自动更换到对应的地址。(这就是环境变量的意义)

vite中环境变量的处理:dotenv第三方库(vite内置了dotenv库)

dotenv第三方库会在启动npm run dev的时候读取.env文件,并解析这个文件中的环境变量,将其注入到process对象上。

在node.js中,process对象(进程对象)代表node.js应用程序。

process 对象是一个全局变量,它提供当前 Node.js 进程的有关信息,以及控制当前 Node.js 进程。

process文档 (👈点击直达)

export default defineConfig(({command})=>{
    console.log('process内容',process.env);
    // ......其他配置
})

vite考虑到和其他配置的一些冲突问题,它不会直接注入到process对象下,而是调用viteloadEnv来手动确认env文件。

loadEnv的三个参数:

1、mode:模式,根据你启动的的命令来的,比如npm run dev就是开发环境,build就是生产环境,如果你启动的命令为:npm run dev --mode development,那么mode会设置为development传递进来,启动命令为npm run dev的话系统会默认帮我们自动补全,这里也可以对mode进行更改,--mode xxxx(自定义名)

2、envDir:环境变量配置文件所在目录,这里可以使用process.cwd(),也可以这么写:envDir:"C:\Users\123\Desktop\vite-test"指向文件目录地址

3、prefixes:接受的环境变量前缀,不写默认为 env

export default defineConfig(({command,mode})=>{
    const env = loadEnv(mode,process.cwd(),prefixes="")
    console.log(env);  // 这里APP_KEY 110,并且BASE_URL也对应的是测试环境地址,挂载到env下面
    // ......其他配置
})

process.cwd():返回当前node进程的工作目录

当我们调用loadEnv的时候,它会做如下几件事情:

1、直接找到.env文件,并解析其中的环境变量,放到一个对象里

2、将传进来的mode这个变量的值进行拼接:.env.development,并根据提供的目录去取对应的配置文件进行解析,并放进一个对象里

3、我们可以理解为下面的操作:

const baseEnvConfig = 读取.env的配置

const modeEnvConfig = 读取.env.mode(根据传入的mode决定,mode=development那么就是.env.development)文件

const lastEnvConfig = {...baseEnvConfig,...modeEnvConfig}

如果是客户端,vite会将对应的环境变量注入到import.meta.env里面去。

但是这里vite做了一个拦截,为了防止我们将隐私性的变量直接注入到import.meta.env,我们的环境变量就必须得是VITE_开头,否则vite不会将环境变量注入到import.meta.env

// .env.development文件:开发环境
APP_KEY = 110 
BASE_URL = http://dev.api/
// request.js
console.log('import.meta.env的内容',import.meta.env)

未找到.env.development文件中的环境变量,因为开头不是VITE_vite拦截了注入操作。

// .env.development文件:开发环境
VITE_APP_KEY = 110 
VITE_BASE_URL = http://dev.api/

当然,VITE_是一个默认前缀,我们也可以在vite.base.config.js文件中更改import.meta.env注入的默认前缀:

import { defineConfig } from "vite";
export default defineConfig({
    envPrefix:"ABC_"  // 配置import.meta.env注入的前缀名称
})

到这里环境变量配置就已经完成了,如果我们想要添加新的环境,例如:测试环境,那么只需要新建一个.env.test文件

// .env.test文件:测试环境
ABC_APP_KEY = 111
ABC_BASE_URL = http://test.api/

package.json中添加测试环境的启动方式"test" : "vite --mode test"

{
  "scripts": {
    "dev": "vite",
    "build" : "vite build",
    "test" : "vite --mode test"
  },
  // ......其它配置
}

启动npm run testloadEnv会自动根据--mode test来寻找环境变量文件,.env后拼接test,也就是.env.test文件

// request.js
console.log('import.meta.env的内容',import.meta.env)
// 利用配置的环境变量请求
const getUserInfo = () => {
    axios.post({
        params : {
            APP_KEY : import.meta.env.ENV_APP_KEY  // 根据环境变量自动匹配APP_KEY
        }
    })
}
目录
相关文章
|
JavaScript
Vue中 使用 moment.js 计算时间差值
Vue中 使用 moment.js 计算时间差值
1441 0
Vue中 使用 moment.js 计算时间差值
|
资源调度 前端开发 JavaScript
开源项目:Linux系统docker安装jeecg-boot低代码开发平台(更新于2022.2.14)
开源项目:Linux系统docker安装jeecg-boot低代码开发平台(更新于2022.2.14)
1511 0
开源项目:Linux系统docker安装jeecg-boot低代码开发平台(更新于2022.2.14)
|
6月前
|
存储 人工智能 自然语言处理
大模型应用:从问题到答案:LlamaIndex RAG系统工作流程详解.15
本文深入解析LlamaIndex核心概念与实战:Document(文档封装)、Node(语义切分)、Index(向量检索)、Query Engine(端到端问答)、Retriever(精准检索)及Response Synthesis(智能合成),配套本地Qwen+MiniLM代码示例,助力RAG快速落地。(238字)
789 22
|
10月前
|
人工智能 供应链 数据挖掘
智能体来了+智能体成企业转型新引擎,阿里云助力产业迈向智能化未来
智能体正成为企业转型新引擎,阿里云引领产业智能化。通过融合大模型与企业场景,智能体已实现降本增效、自动化办公、精准决策,广泛应用于制造、服务、零售等领域。2024年被视为“智能体应用元年”,阿里云推动技术普惠,助力企业AI转型,培育开发人才,开启智能经济新时代。(238字)
548 2
|
Rust 开发工具 开发者
Ruff代码分析
Ruff代码分析
713 0
|
JavaScript
Vue3基础(20)___Vue3配置错误路由重定向写法
本文介绍了Vue 3中配置错误路由重定向的正确写法,包括使用参数和自定义正则表达式来定义通配符路由。
399 0
Vue3基础(20)___Vue3配置错误路由重定向写法
uniapp实战 —— 弹出层 uni-popup (含vue3子组件调父组件的方法)
uniapp实战 —— 弹出层 uni-popup (含vue3子组件调父组件的方法)
2038 1
|
移动开发 API PHP
EasyImage2.0 简单图床开源
支持API 支持仅登录后上传 支持设置图片质量 支持压缩图片大小 支持文字/图片水印 支持设置图片指定宽/高 支持上传图片转换为指定格式 支持限制最低宽度/高度上传 支持上传其他文件格式 在线管理图片 支持网站统计 支持设置广告 支持图片鉴黄 支持自定义代码 支持上传IP黑白名单 支持上传日志IP定位 支持限制日上传次数 支持创建仅上传用户 对于安装环境要求极低 对于服务器性能要求极低 理论上支持所有常见格式 更多功能支持请安装尝试···
543 3
|
JavaScript 测试技术
Vue开发项目过程中环境变量的配置(vite、vue3、ts)
Vue开发项目过程中环境变量的配置(vite、vue3、ts)
492 0
|
开发工具 git
git报错 Unable to create ‘D:/project/xxx/.git/index.lock‘: File exists.
git报错 Unable to create ‘D:/project/xxx/.git/index.lock‘: File exists.
2422 1