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.ts 中 define |
使用场景 | 接口地址、环境配置 | 编译时常量、版本号、开关 |
作用范围 | 根据运行环境变化 | 所有环境都一样(除非在配置里写条件逻辑) |
读取方式 | 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">
六、最佳实践
-
统一管理环境变量:建议创建
src/config/index.ts
文件,把常用变量统一导出。export const API_BASE = import.meta.env.VITE_API_BASE export const APP_TITLE = import.meta.env.VITE_APP_TITLE
-
避免硬编码:接口、版本号、开关等尽量写在
.env
或define
中,方便维护。 -
环境隔离:开发、测试、生产环境尽量分开配置,避免发布时连接错误的接口。
七、总结
-
环境变量:通过
.env
文件定义,使用import.meta.env
读取,适合不同环境下的配置。 -
全局变量:通过 Vite 的
define
配置注入,适合编译时的全局常量。 -
两者结合使用,可以让项目更加灵活、易维护。
掌握了这套方法,在实际开发中就能游刃有余地管理不同环境与全局配置啦 。