目录

一、什么是环境变量?

二、Vite 的环境变量机制

1. .env 文件

2. 定义环境变量

3. 使用环境变量

4. 内置环境变量

三、Vite 中的全局变量

1. 使用 define 配置

2. 使用 TypeScript 声明

四、环境变量 vs 全局变量

五、常见问题与坑点

1. 为什么必须加 VITE_ 前缀?

2. 修改 .env 文件后不生效?

3. 在 JS 文件之外(如 HTML)怎么用?

六、最佳实践

七、总结


Vite 环境变量与全局变量详解

在前端开发中,环境变量与全局变量的使用非常普遍。
例如:接口的请求地址、不同环境(开发/测试/生产)的配置、应用级的常量等等。

如果你使用 Vite 搭建项目,就会发现它对环境变量的处理方式和以往的 Webpack 有一些不同。
本文将带你全面了解 Vite 中的环境变量与全局变量,并结合实际案例讲解如何正确使用。


一、什么是环境变量?

环境变量(Environment Variables),顾名思义就是根据不同的运行环境,来提供不同的配置。
常见场景:

  • 开发环境(development):调试本地接口,输出调试日志。

  • 测试环境(test):连接测试服务器。

  • 生产环境(production):关闭调试日志,使用正式接口。

这样可以避免在项目中硬编码,提升可维护性。


二、Vite 的环境变量机制

1. .env 文件

Vite 默认支持使用 .env 文件来定义环境变量。
常见的文件有:

  • .env —— 所有环境都会加载。

  • .env.development —— 开发环境加载。

  • .env.production —— 生产环境加载。

  • .env.test —— 测试环境加载。

2. 定义环境变量

.env 文件中书写时,必须以 VITE_ 前缀开头,才会暴露给前端代码使用。

例如:

# .env.development
VITE_APP_TITLE=我的开发环境
VITE_API_BASE=http://localhost:3000/api
# .env.production
VITE_APP_TITLE=生产环境应用
VITE_API_BASE=https://api.example.com

3. 使用环境变量

在代码中可以通过 import.meta.env 访问环境变量:

console.log(import.meta.env.VITE_APP_TITLE) // 我的开发环境 / 生产环境应用
console.log(import.meta.env.VITE_API_BASE) // 不同环境的接口地址

4. 内置环境变量

Vite 内置了一些环境变量:

  • import.meta.env.MODE —— 当前环境模式(development / production)。

  • import.meta.env.BASE_URL —— 部署应用时的基础路径。

  • import.meta.env.PROD —— 是否为生产环境。

  • import.meta.env.DEV —— 是否为开发环境。


三、Vite 中的全局变量

有时候我们需要在项目中定义一些 全局常量,例如:应用版本号、主题配置、常量枚举等。
在 Vite 中有两种方式:

1. 使用 define 配置

vite.config.ts 中:

import { defineConfig } from 'vite'export default defineConfig({define: {__APP_VERSION__: JSON.stringify('1.0.0'),__BUILD_TIME__: JSON.stringify(new Date().toISOString())}
})
在代码中使用:
console.log(__APP_VERSION__) // 1.0.0
console.log(__BUILD_TIME__) // 构建时间

这种方式非常适合在编译阶段注入常量。

2. 使用 TypeScript 声明

为了避免 TS 报错,可以在 env.d.ts 中声明:

declare const __APP_VERSION__: string
declare const __BUILD_TIME__: string

四、环境变量 vs 全局变量

对比点环境变量(.env全局变量(define
定义方式.env 文件vite.config.tsdefine
使用场景接口地址、环境配置编译时常量、版本号、开关
作用范围根据运行环境变化所有环境都一样(除非在配置里写条件逻辑)
读取方式import.meta.env直接访问定义的变量

五、常见问题与坑点

1. 为什么必须加 VITE_ 前缀?

这是 Vite 的安全机制。
防止不小心把敏感信息(比如数据库密码)暴露到前端。

2. 修改 .env 文件后不生效?

修改后需要 重新启动开发服务器,否则不会加载新的环境变量。

3. 在 JS 文件之外(如 HTML)怎么用?

可以通过 import.meta.env.BASE_URL 等变量结合 Vite 插值语法使用:

<link rel="icon" href="<%= BASE_URL %>favicon.ico">

六、最佳实践

  1. 统一管理环境变量:建议创建 src/config/index.ts 文件,把常用变量统一导出。

    export const API_BASE = import.meta.env.VITE_API_BASE
    export const APP_TITLE = import.meta.env.VITE_APP_TITLE
    
  2. 避免硬编码:接口、版本号、开关等尽量写在 .envdefine 中,方便维护。

  3. 环境隔离:开发、测试、生产环境尽量分开配置,避免发布时连接错误的接口。


七、总结

  • 环境变量:通过 .env 文件定义,使用 import.meta.env 读取,适合不同环境下的配置。

  • 全局变量:通过 Vite 的 define 配置注入,适合编译时的全局常量。

  • 两者结合使用,可以让项目更加灵活、易维护。

掌握了这套方法,在实际开发中就能游刃有余地管理不同环境与全局配置啦 。

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

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

相关文章

华为S5720交换机配置教程:开启Web管理功能

华为S5720交换机Web登录配置指南 华为S5720系列交换机支持通过Web界面进行管理&#xff0c;这是一种图形化的操作方式&#xff0c;比命令行更直观易用。以下是配置S5720交换机开启Web登录的详细步骤。 一、准备工作 连接设备&#xff1a;使用Console线连接交换机的Console…

插入排序及希尔排序

插入排序是一种十分简单有效的排序算法&#xff0c;其基本思想就是将每一个待排序的数据按照关键字大小插入前边已经排好序的子序列之中。 文章目录最基本的插入排序折半插入排序希尔排序 最基本的插入排序 插入排序的基本思想如图可以看出&#xff0c;不断选中数组中的元素&am…

码农必备!本地调试神器act,GitHub Actions最佳拍档

引言 在现代软件开发实践中&#xff0c;持续集成和持续部署(CI/CD)已成为不可或缺的环节。GitHub Actions 作为 GitHub 官方提供的 CI/CD 解决方案&#xff0c;凭借其与代码仓库的深度集成和丰富的生态系统&#xff0c;获得了广大开发者的青睐。然而&#xff0c;每次修改 CI/C…

大模型本地部署与API服务教程

大模型本地部署与API服务教程 目标&#xff1a;在Ubuntu服务器部署本地大模型&#xff0c;并提供API服务&#xff0c;支持局域网下的Windows客户端调用。 支持两种部署方式&#xff1a;① 自建FastAPI服务&#xff08;高定制&#xff09; ② 使用Ollama&#xff08;极简快速&am…

亚马逊美加站点物流新规解读:库存处理逻辑重构与卖家应对策略

2025年9月&#xff0c;亚马逊美国与加拿大站点即将实施物流计划强制调整&#xff0c;批量清货与捐赠计划的规则迭代&#xff0c;标志着平台对库存生命周期管理的重视程度提升&#xff0c;此次新规以“可持续发展”为核心导向&#xff0c;通过强制与默认参与的双重机制&#xff…

SpringBoot Web 入门指南:从零搭建第一个SpringBoot程序

SpringBoot Web 入门指南&#xff1a;从零搭建第一个SpringBoot程序SpringBoot Web 入门指南&#xff1a;从零搭建第一个SpringBoot程序一、Web开发基础&#xff1a;静态/动态资源与B/S、C/S架构解析​资源类型系统架构二、Spring 与 Spring Boot 核心介绍1. Spring 框架2. Spr…

从图灵完备性到现实差距:为什么你的设备和你本人都潜力无限,却表现各异?

理论上的无限潜力&#xff0c;为何被困在现实的牢笼中&#xff1f;一、引言&#xff1a;一个反直觉的概念 在计算机科学中&#xff0c;图灵完备性&#xff08;Turing Completeness&#xff09; 是衡量一个系统计算能力的黄金标准。它得名于计算机科学之父艾伦图灵&#xff08;A…

Android系统打通HAL层到应用层 --- Framework框架搭建

本文是接续上文&#xff0c;针对于HAL层的接口封装Framework层的接口 HAL层框架搭建&#xff1a;https://blog.csdn.net/m0_50408097/article/details/151148637?spm1001.2014.3001.5502 在 Android 系统架构中&#xff0c;Framework 层&#xff08;框架层&#xff09; 位于 H…

LwIP入门实战 — 2 LwIP概述

目录 2.1 LwIP简介 2.2 LwIP文件架构分析 2.2.1 LwIP软件架构 2.2.2 主要模块划分 2.3 IPC通讯机制 2.4 LwIP的3种编程接口 2.4.1 RAW/Callback API 2.4.2 Netconn API 2.1 LwIP简介 LWIP&#xff08;Light Weight Internet Protocol&#xff0c;轻型网络协议栈&#…

微信小程序-day3

页面导航跳转声明式导航注意&#xff1a;url开头要有/1. 导航到 tabBar 页面2. 导航到非 tabBar 页面3. 后退导航编程式导航跳转传参参数可以在onLoad里用option获取下拉刷新事件可在onPullDownRefresh中定义下拉事件对应操作在其中加入这个函数wx.stopPullDownRefresh()&#…

关于ES中文分词器analysis-ik快速安装

ES中文分词器插件 安装快速安装手动安装 应用ik_max_word 与 ik_smart 的区别验证是否生效 官方地址&#xff1a;https://github.com/infinilabs/analysis-ik 安装 快速安装 插件安装&#xff08;将链接最后的版本号换成当前ES版本号&#xff09;&#xff1a; bin/elastics…

STM32G4 电流环闭环

目录一、STM32G4 电流环闭环1 电流环闭环PID控制2 电流环闭环建模附学习参考网址欢迎大家有问题评论交流 (* ^ ω ^)一、STM32G4 电流环闭环 1 电流环闭环 电流环框图 PID控制 时域和拉普拉斯域的传递函数 PID&#xff1a; P比例部分&#xff0c;I积分部分&#xff0c;D微分…

利用 Java 爬虫获取淘宝商品详情 API 接口

本文将详细介绍如何使用 Java 编写爬虫程序&#xff0c;通过淘宝开放平台的高级版 API 接口获取商品的详细信息。一、淘宝商品详情 API 接口概述淘宝开放平台提供了多个 API 接口用于获取商品的详细信息&#xff0c;其中 taobao.item.get 和 taobao.item.get_pro 是常用的接口。…

idea上传本地项目代码到Gitee仓库教程

前言&#xff1a;本地一个项目代码上传到Gitee仓库1.登录Gitee官网新建仓库&#xff08;命名跟项目同名&#xff09;2.idea添加Gitee插件&#xff08;需要Restart&#xff09;3.idea配置已安装git的路径4.idea添加Gitee账户5.给项目创建Git本地仓库Git仓库创建成功&#xff0c;…

往届生还有机会进入计算机这个行业吗?还能找见好工作吗

前言 最近有很多的往届生来咨询我&#xff0c;问我还能找见工作吗&#xff0c;还能进入这一行吗&#xff08;大多数都是一些24届&#xff0c;考研失败的同学&#xff09; 针对目前这种情况&#xff0c;还能不能进&#xff0c;只能说很难&#xff0c;非常难。 在这里&#xff0c…

Python爬虫实战:研究 Lines, bars and markers 模块,构建电商平台数据采集和分析系统

1. 引言 1.1 研究背景 随着互联网技术的飞速发展,网络上积累了海量的数据资源,这些数据蕴含着丰富的信息和价值。如何高效地获取、处理和分析这些数据,成为信息时代面临的重要课题。Python 作为一种功能强大的编程语言,凭借其丰富的库支持和简洁的语法,在网络数据爬取和…

大文件稳定上传:Spring Boot + MinIO 断点续传实践

文章目录一、引言&#xff1a;问题背景二、技术选型与项目架构三、核心设计与实现1. 初始化上传 (/init)2. 上传分块 (/chunk)3. 完成上传与合并 (/complete)4. 查询上传进度 (/progress)四、断点续传工作流程五、方案优势总结六、拓展优化七、方案优势对比一、引言&#xff1a…

表达式语言EL

表达式语言EL 1.EL表达式的作用 可以说&#xff0c;EL&#xff08;Expression Language&#xff09;表达式语言&#xff0c;就是用来替代<% %>的&#xff0c;EL比<%%>更简洁&#xff0c;更方便。 2.与请求参数有关的内置对象 1.使用表达式&#xff1a;<%request…

pycharm无法添加本地conda解释器/命令行激活conda时出现很多无关内容

本文主要解决以下两种问题&#xff1a;1.pycharm在添加本地非base环境时出现无法添加的情况&#xff0c;特征为&#xff1a;正在创建conda解释器--->弹出一个黑窗口又迅速关闭&#xff0c;最终无法添加成功2.在conda prompt中进行activate 指定env&#xff08;非base&#x…

LeetCode 844.比较含退格的字符串

给定 s 和 t 两个字符串&#xff0c;当它们分别被输入到空白的文本编辑器后&#xff0c;如果两者相等&#xff0c;返回 true 。# 代表退格字符。 注意&#xff1a;如果对空文本输入退格字符&#xff0c;文本继续为空。 示例 1&#xff1a; 输入&#xff1a;s “ab#c”, t “a…