uni-app项目默认启用Vite需满足Vue3+CLI≥3.9.0,此时vite.config.ts为唯一有效配置入口,必须用defineUniAppConfig包裹插件,环境变量须以UNI_APP_或VUE_APP_开头,平台判断用__UNI_MP_WEIXIN__等宏常量。

uni-app 项目默认就是 Vite 构建,只要满足 Vue3 + CLI ≥ 3.9.0,就不用“切换”或“接入”Vite——你真正要做的,是避免错误配置拖慢构建,以及用对 Vite 的加速能力。
确认项目确实是 Vite 模式,不是靠猜
很多人花半天调 vite.config.ts,结果项目压根没走 Vite。关键看三点:
- 执行
npx uni-app -V,输出版本必须 ≥3.9.0;低于就升级:npm install -g @dcloudio/vue-cli - 项目根目录有
vite.config.ts(或vite.config.js),且没有vue.config.js或webpack.config.js—— 如果有,直接删掉,它不生效但会干扰判断 - 运行
npm run dev:h5时,终端第一行显示的是vite vX.X.X dev server,不是vue-cli-service
vite.config.ts 必须包裹 defineUniAppConfig,否则 H5 构建失效
这是最常踩的坑:照搬 Vite 官方写法,只写 defineConfig({ plugins: [] }),结果 H5 白屏、pages.json 不加载、uni.getSystemInfoSync() 返回空对象。
原因在于:@dcloudio/vite-plugin-uni 不是可选插件,它是 uni-app 在 Vite 下的运行时核心,负责解析 <template lang="wxml"></template>、注入平台 API、处理 __UNI_MP_WEIXIN__ 这类宏常量。
正确写法只有这一种:
import { defineConfig } from 'vite'
import { defineUniAppConfig } from '@dcloudio/vite-plugin-uni'
export default defineConfig({
plugins: [defineUniAppConfig()],
resolve: {
alias: {
'@': '/src'
}
}
})
- 漏掉
defineUniAppConfig(),小程序端可能暂时正常,但 H5 端一定出问题 - 不要手动加
@vitejs/plugin-vue——@dcloudio/vite-plugin-uni内部已集成 Vue 3 支持 - 别名、proxy、env 等配置可以放心加,但插件链不能断
环境变量必须以 UNI_APP_ 或 VUE_APP_ 开头才能被注入
你在 .env.development 里写了 API_BASE_URL=https://dev.example.com,然后在代码里写 import.meta.env.API_BASE_URL,结果是 undefined —— 这不是 bug,是 uni-app 的硬性规则。
- 只有前缀为
UNI_APP_或VUE_APP_的变量才会被注入到import.meta.env - 正确写法是:
UNI_APP_API_BASE_URL=https://dev.example.com,然后读取import.meta.env.UNI_APP_API_BASE_URL -
process.env.NODE_ENV在 Vite 下恒为"production",不可用于运行时判断;平台判断一律用编译期宏:__UNI_MP_WEIXIN__、__UNI_APP_PLUS__
代理、别名、插件这些配置写在哪?只认 vite.config.ts
vue.config.js 在 Vite 模式下完全失效,删不删都不报错,但留着就是误导。所有自定义行为都必须落在 vite.config.ts 里:
- 开发代理(解决 H5 跨域):
server.proxy配在defineConfig的顶层对象中 - 路径别名:
resolve.alias,比如把@指向/src - 第三方插件(如
unplugin-auto-import):加在plugins数组里,但必须确保排在defineUniAppConfig()之后(顺序敏感) - 构建优化(如禁用依赖预构建):
optimizeDeps.noDiscovery = true,但慎用,可能引发运行时模块找不到
真正影响构建速度的关键点不在“加了多少插件”,而在于是否破坏了 Vite 的原生 ESM 解析链——比如误加 @vitejs/plugin-vue、漏掉 defineUniAppConfig、或在 define 中错误重写 process.env,这些都会让 Vite 回退到兼容模式,冷启动从 1 秒变成 5 秒以上。


















