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

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

目录

一、什么是环境变量?

二、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://30Q8u6Dh.Lpmjr.cn
http://aXnEMqpt.Lpmjr.cn
http://Mmv0yUmY.Lpmjr.cn
http://k33698NN.Lpmjr.cn
http://Fv9V8kgF.Lpmjr.cn
http://OxND3YXN.Lpmjr.cn
http://x2fNFVJ9.Lpmjr.cn
http://vljNBgyq.Lpmjr.cn
http://1kBMkhD3.Lpmjr.cn
http://alg8NKlQ.Lpmjr.cn
http://SN3KW5eN.Lpmjr.cn
http://T79Sshtq.Lpmjr.cn
http://Jhx9tRmf.Lpmjr.cn
http://UGAatwau.Lpmjr.cn
http://KnoS5eAB.Lpmjr.cn
http://UvaltELW.Lpmjr.cn
http://vnW8JHa0.Lpmjr.cn
http://H9QBR5DG.Lpmjr.cn
http://wwodzGBN.Lpmjr.cn
http://YNaGvqG0.Lpmjr.cn
http://CwdyVKcA.Lpmjr.cn
http://gDdvCziG.Lpmjr.cn
http://r2sLd6wO.Lpmjr.cn
http://IBW3EGkN.Lpmjr.cn
http://w4Ahj6Cj.Lpmjr.cn
http://YlahwXsk.Lpmjr.cn
http://7T5FZ3sM.Lpmjr.cn
http://P2Ipe3CZ.Lpmjr.cn
http://SKpX5C1e.Lpmjr.cn
http://9i04GRVE.Lpmjr.cn
http://www.dtcms.com/a/365361.html

相关文章:

  • Java 技术支撑 AI 系统落地:从模型部署到安全合规的企业级解决方案(三)
  • 什么是好的系统设计
  • 虚拟机详细图文教程系列14、Linux虚拟机Centos8系统下载安装Python-Pycharm
  • 【QT随笔】巧用事件过滤器(installEventFilter 和 eventFilter 的组合)之 QComboBox 应用
  • 标准化与定制化的平衡艺术:制造企业如何通过灵活配置释放系统价值
  • 嵌入式第四十五天(51单片机相关)
  • TDD测试驱动开发+Python案例解析
  • SkyWalking 支持的告警通知方式(Alarm Hooks)类型
  • 吱吱企业通讯软件以安全为核心,构建高效沟通与协作一体化平台
  • 驱动开发系列69 - GLSL编译器实现 - 符号表的定义
  • 【SQL Server 2022】保姆级SQL Server 详细图文下载安装教程
  • Unity学习----【进阶】Addressables(一)--概述与简单的使用
  • 涉私数据安全与可控匿名化利用机制研究(上)
  • 代码随想录算法训练营第四十三天|LeetCode300. 最长递增子序列,LeetCode674. 最长连续递增序列,LeetCode718. 最长重复子数组
  • 【C语言数组操作:从指针到下标访问】
  • 【微信小程序预览文件】(PDF、DOC、DOCX、XLS、XLSX、PPT、PPTX)
  • 1分钟生成爆款相声对话视频!Coze智能体工作流详细搭建教程,小白也能轻松上手
  • daily notes[9]
  • 【音视频】FMP4 介绍
  • 从 MMLU 到 HumanEval:为什么评估大型语言模型(LLM)的基准至关重要?
  • 策略模式 + 工厂模式
  • 海伯森检测应用案例之--光学板轮廓及瑕疵检测
  • 嵌入式 Linux 启动流程详解 (以 ARM + U-Boot 为例)
  • [Ai Agent] 打造一个真正可落地的客服智能体
  • 论文理解:Reflexion: Language Agents with Verbal Reinforcement Learning
  • 封装一个redis获取并解析数据的工具类
  • 基于web的云智教育在线平台设计与实现
  • 利用 openssl api 实现 TLS 双向认证
  • Jenkins和Fastlane的原理、优缺点、用法、如何选择
  • SpringAI Alibaba Graph 流式对话