别再把 Vite 6/7/8 的 Environment API 当成环境变量了!一文看懂它与 Mode 的本质区别

0 阅读3分钟

🚀 省流助手(速通结论):
Mode(模式)是 “一套代码,多种配置” (如测试环境 vs 生产环境),决定怎么编;而 Environment API 是 “一套代码,多个分身” (如浏览器端 vs 服务端 vs 边缘计算),决定在哪跑。前者是环境参数的切换,后者是构建引擎的“多核并行”革命。


一、 序言:从“双线作战”说起

在 Vite 5 以前,如果你要做 SSR(服务端渲染),你可能得在 package.json 里写出这种“痛苦”的脚本:

json

"build": "vite build && vite build --ssr"

请谨慎使用此类代码。

这本质上是启动了两个完全独立的 Vite 进程,各扫门前雪。而从 Vite 6 开启实验、到 Vite 8 彻底稳固的 Environment API,就是为了终结这种低效的“分头行动”。

二、 Environment API:Vite 的“多重人格”

很多同学听到“Environment”第一反应就是 .env 文件。大错特错!

Vite 的 Environment API 是一套全新的构建架构规范。它允许你在同一个 Vite 进程里,定义多个独立的“运行环境容器”。

  1. 它长什么样?

在 vite.config.ts 中,它不再是碎散的配置,而是整齐的列队:

typescript

// vite.config.ts (Vite 8 风格)
export default defineConfig({
  environments: {
    client: { /* 浏览器端专属配置 */ },
    ssr: { /* Node.js 服务端专属配置 */ },
    edge: { /* Cloudflare Workers 专属配置 */ }
  }
})

请谨慎使用此类代码。

  1. 核心威力
  • 共享模块图谱:虽然产出多份代码,但 Vite 内部只解析一次依赖关系,速度快得飞起。
  • 插件感知:插件可以通过 this.environment.name 识别自己是在为谁打工,从而精准投喂代码。

三、 深度对标:Environment vs Mode

这是最容易混淆的地方,我们直接上表格对比:

维度Mode (模式)Environment API (环境 API)
核心目的区分开发/生产/测试逻辑区分浏览器/服务器/边缘端运行时
生效方式切换 .env 文件和压缩策略开启并行的构建“流水线”
运行状态互斥(一次只能跑一个 Mode)并行(一个进程同时处理多个 Environment)
典型代表developmentproductionclientssrworkerd
产物结果最终只出一份代码按照环境配置出多份针对性代码

比喻理解:

  • Mode 像是一件衣服的颜色:你要么穿红色的(测试版),要么穿蓝色的(正式版)。
  • Environment 像是衣服的尺码和材质:同一件设计,我要出一件真丝的给模特(浏览器),出一件棉质的给店员(服务端)。

四、 为什么说它是 Vite 8 的“神技”?

到了 Vite 8,这个 API 配合基于 Rust 的 Rolldown 引擎,真正发挥了恐怖的性能:

  1. 并行不乱:利用 Rust 的多线程,同时打包 Client 和 SSR,时间消耗却接近单端打包。
  2. 抹平差异:开发环境下,你的 SSR 代码和 Client 代码共用一套 HMR(热更新)逻辑,再也不会出现“改了代码浏览器变了,服务器没变”的尴尬。
  3. 精准构建:你可以通过 vite build --environment ssr 只精准构建某一个分身,灵活度极高。

五、 结语

Environment API 的出现,标志着 Vite 从一个“前端构建工具”正式进化为“全栈通用构建引擎”。它不再只关心你的 JS 怎么压缩,更关心你的代码如何在复杂的现代互联网基础设施中(Edge, Serverless, Browser)优雅落地。

如果你还在用多个进程拼凑打包命令,是时候拥抱 Vite 8 的全速时代了!