彻底弄懂了Vite中的环境变量和模式

环境变量

Vite 在一个特殊的import.meta.env对象中提供了一些环境变量。这个对象中有一些在所有情况下都可以使用的内建变量:

  • import.meta.env.MODE:{string} 应用运行的模式
  • import.meta.env.BASE_URL: {string} 部署应用时的基本 URL。他由 base 配置项决定。
  • import.meta.env.PROD: {boolean} 应用是否运行在生产环境。
  • import.meta.env.DEV: {boolean} 应用是否运行在开发环境 (永远与 import.meta.env.PROD 相反)。
  • import.meta.env.SSR: {boolean} 应用是否运行在 server 上。

生产环境替换

在生产环境中,这些环境变量会在构建时被静态替换,因此,在引用它们时请使用完全静态的字符串。动态的 key 将无法生效。

// ❌ 错误
const key = 'VITE_API_URL';
console.log(import.meta.env[key]); // 无法正常工作!

// ✅ 正确(静态访问)
console.log(import.meta.env.VITE_API_URL);

.env文件

Vite可以在.env文件中配置环境变量。

环境变量文件类型

Vite 支持以下类型的 .env 文件,按 优先级从高到低 排序:

文件名 作用 是否被 Git 忽略
.env.[mode].local 模式专用本地覆盖(如 .env.development.local ✅ 是
.env.local 通用本地覆盖(所有模式都会加载) ✅ 是
.env.[mode] 模式专用配置(如 .env.production ❌ 否
.env 通用配置(所有模式都会加载) ❌ 否

解释

  • .env.[mode].local:特定模式的本地覆盖文件,适用于特定环境的本地配置,不会被 Git 忽略。
  • .env.local:通用的本地覆盖文件,适用于所有模式的本地配置,不会被 Git 忽略。
  • .env.[mode]:特定模式的配置文件,适用于特定环境的配置,会被 Git 忽略。
  • .env:通用的配置文件,适用于所有模式的配置,会被 Git 忽略。
  • 加载顺序:按照优先级由高到低依次加载
  • 覆盖规则同名的环境变量会被更高优先级的文件覆盖,不同名的环境变量会合并。

通过这种方式,你可以更好地管理不同环境下的配置,并确保敏感信息不会被意外提交到版本控制系统中。

示例文件 .env.development

# 客户端可访问的变量(必须以 VITE_ 开头)
VITE_APP_API_BASEURL=/api
VITE_APP_TITLE=Vite + React + Ts (development)
VITE_DEBUG=true

# 服务端专用变量(非 VITE_ 前缀,仅在 Node.js 中通过 process.env 访问)
SECRET_KEY=123456

场景 1:运行 vite dev(默认 development 模式)
加载顺序:

  1. .env.development.local(如果存在)

  2. .env.development

  3. .env.local

  4. .env

场景 2:运行 vite build --mode staging
加载顺序:

  1. .env.staging.local(如果存在)

  2. .env.staging

  3. .env.local

  4. .env

在代码中访问环境变量

通过 import.meta.env 访问以 VITE_ 开头的变量:

// 访问环境变量
const apiUrl= import.meta.env.VITE_APP_API_BASEURL
const isDebug = import.meta.env.VITE_DEBUG;

console.log(`API 地址:${
     apiUrl}
<think>好的,我需要解答用户关于Viteimport.meta.env.DEV的作用含义的问题。首先,我得回忆一下Vite环境变量处理机制。根据用户提供的引用内容,Vite使用import.meta.env来暴露环境变量,其中内置了几个默认变量,比如MODE、DEV、PROD等。 用户提到的引用[1][2]都说明了import.meta.env的使用方法,比如直接读取环境变量,并且需要在变量名前加上VITE_前缀。但这里的问题是关于DEV这个特定属性的,它可能不是用户自定义的,而是Vite内置的。 接下来,我需要确认DEV的具体含义。根据Vite的文档,import.meta.env.DEV是一个布尔值,表示当前是否处于开发模式。当运行vite dev或vite serve时,这个值会是true;而在生产构建(vite build)时,它会是false。这点需要明确说明。 然后,用户可能想知道如何使用这个属性。常见的用途是根据开发或生产环境切换不同的配置,比如启用调试工具或连接不同的API端点。需要举一个实际的例子,比如条件判断是否启用日志。 另外,用户提供的引用[3]提到了TypeScript错误的问题,可能需要配置tsconfig.json来包含vite/client类型定义,以避免类型错误。虽然用户的问题没有直接提到TS错误,但可能相关,可以简要提及作为补充信息。 最后,确保回答符合格式要求,使用中文,行内公式用$...$,独立公式用$$...$$,不过这个问题可能不涉及数学公式,所以可能不需要。结构要清晰,分点解释含义用法,并给出示例代码。同时生成相关问题,比如其他内置变量、配置方法、TS集成等。</think>在 Vite 或 ESModule 环境中,$import.meta.env.DEV$ 是一个内置的环境变量标识,用于判断当前运行环境是否为开发模式。以下是详细说明: ### 1. 含义与作用 - **布尔值标识**:$import.meta.env.DEV$ 返回布尔值: - $true$ 表示当前处于开发环境(运行 `vite dev` 或 `vite serve`) - $false$ 表示处于生产环境(运行 `vite build`) - **自动切换**:该值由 Vite 根据启动命令自动设置,无需手动配置[^1][^2] ### 2. 使用场景 ```javascript // 示例:根据环境启用调试工具 if (import.meta.env.DEV) { console.log("开发模式:启用详细日志"); enableDebugger(); } // 示例:切换API端点 const API_URL = import.meta.env.DEV ? "http://localhost:3000/api" : "https://production.com/api"; ``` ### 3. 相关环境变量 Vite 还提供其他内置变量: - $import.meta.env.MODE$:当前模式 (`development`/`production`) - $import.meta.env.PROD$:是否为生产环境 - $import.meta.env.SSR$:是否在服务端渲染 ### 4. 类型定义支持 若使用 TypeScript 时出现类型错误,需在 `tsconfig.json` 中添加: ```json { "compilerOptions": { "types": ["vite/client"] } } ``` 这会为环境变量提供类型提示[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值