在 vite 中,条件配置通过导出一个函数来实现,该函数接收 env 对象作为参数,根据 env.mode 的值返回不同的配置项。具体做法是在 vite.config.js 中导出一个异步或同步函数,检查 env.mode 是否等于 'production' 或其他自定义模式,从而动态合并或覆盖基础配置。

如何根据开发环境启用调试插件
当 env.mode 为 'development' 时,可以注入专门用于调试的插件或修改构建选项。例如,在开发模式下启用更详细的错误提示或特定的热更新策略,而在生产模式下则禁用这些开销较大的功能。

// vite.config.js
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
export default defineConfig(({ mode }) => {
const isDev = mode === 'development';
return {
plugins: [
react(),
// 仅在开发环境下添加调试插件
isDev && { name: 'debug-plugin', transform(code) { return code; } }
].filter(Boolean),
build: {
sourcemap: isDev, // 开发环境生成 SourceMap
},
server: {
open: isDev, // 开发环境自动打开浏览器
}
};
});
上述代码展示了如何在 vite.config.js 中使用条件逻辑。当运行 npx vite(默认 mode 为 development)时,sourcemap 为 true 且服务器会自动打开页面;当运行 npx vite build(默认 mode 为 production)时,sourcemap 为 false 且不会打开浏览器。这种写法确保了不同环境下的行为差异。
如何根据生产环境优化资源输出
在生产环境中,通常需要对输出路径、压缩算法或目标浏览器进行特定配置。通过判断 env.mode 为 'production',可以设置 build.outDir 为特定目录,或者调整 esbuild 的 minify 选项以平衡打包速度与体积。

// vite.config.js
import { defineConfig } from 'vite';
import path from 'path';
export default defineConfig(({ mode }) => {
const isProd = mode === 'production';
return {
resolve: {
alias: {
'@': path.resolve(__dirname, 'src'),
},
},
build: {
outDir: isProd ? 'dist/prod' : 'dist/dev',
minify: isProd ? 'terser' : false,
terserOptions: isProd ? {
compress: {
drop_console: true,
},
} : undefined,
},
};
});
这段代码演示了如何根据生产环境调整输出目录和压缩策略。如果 mode 是 'production',构建产物会放入 dist/prod 并使用 Terser 进行压缩,同时移除 console 语句;否则放入 dist/dev 且不进行压缩。这有助于区分开发和生产的构建结果,避免相互干扰。
当 mode 为自定义值时配置如何处理
如果运行命令时指定了自定义的 --mode 参数,例如 npx vite --mode staging,env.mode 将等于 'staging'。此时,之前的 isDev 和 isProd 判断均为 false,配置将回退到默认行为或需要额外添加针对 'staging' 的逻辑分支。
// vite.config.js
import { defineConfig } from 'vite';
export default defineConfig(({ mode }) => {
return {
plugins: [],
build: {
// 如果没有针对 staging 的特殊处理,这里可能保持默认
// 建议显式处理所有已知 mode
outDir: mode === 'staging' ? 'dist/staging' : (mode === 'production' ? 'dist/prod' : 'dist/dev'),
},
};
});
在实际项目中,建议对所有可能的 mode 值进行显式处理,以避免因未预期的模式导致配置遗漏。例如,可以为 'staging' 添加专门的日志级别或 API 端点配置,确保测试环境的稳定性。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











