manifest.json 中的 vueVersion 字段仅作可视化提示,不参与版本控制;真正决定 Vue 版本的是 package.json 的依赖版本、@dcloudio/uni-app 版本及 main.js 中的 createApp/createSSRApp 入口写法,三者必须严格一致。

manifest.json 中的 vueVersion 字段不能用于切换 Vue 版本,改了也没用,运行时仍按初始化模板决定的版本执行。
为什么改 manifest.json 里的 vueVersion 没效果
因为 uni-app 的 Vue 版本在项目创建时就已由模板固化:Vue2 项目用 createApp + vue@2.x + @dcloudio/uni-app@2.x;Vue3 项目用 createSSRApp + vue@^3.2.0 + @dcloudio/uni-app@^3.0.0。manifest.json 仅在 HBuilderX 可视化界面中作为“提示字段”存在,编译器根本不读取它做版本判断。
常见错误现象包括:createSSRApp is not defined、setup() returned property XXX is not defined on object、this.$nextTick is not a function——这些全是 Vue2/Vue3 混用导致的运行时崩塌。
- HBuilderX v3.9.12+ 默认勾选“使用 Vue3”,但旧版(如 v3.8.x)仍默认 Vue2
- CLI 创建项目时,
npx degit dcloudio/uni-preset-vue#v3才真正生成 Vue3 模板 - 哪怕你手动把
manifest.json里"vueVersion": 3改对了,main.js还是createApp写法,照样报错
真正生效的 Vue 版本确认方式
不要看 manifest.json,要看三个地方是否一致:
立即学习“前端免费学习笔记(深入)”;
将静态 Vue 页面(index.vue)改造为动态页面(Custom.vue);稿源仅限 index.vue、其引用的 CSS 与资源路径,禁止参考仓库内其他文件。Invoke when user wants to transform a static Vue page into a dynamic data-driven page with Element UI components.
-
package.json中vue版本:Vue2 项目应为^2.6.0,Vue3 项目必须是^3.2.0或更高 -
package.json中@dcloudio/uni-app版本:Vue2 对应^2.x,Vue3 必须是^3.0.0起 -
src/main.js(或main.ts)入口写法:createApp是 Vue2,createSSRApp是 Vue3(注意不是createApp)
三者不统一,就必然出问题。比如 vue@3.4.0 + @dcloudio/uni-app@2.9.18 + createApp ——这属于“假 Vue3”,编译能过,运行直接白屏。
已有项目想切 Vue3?别碰 manifest.json
升级不是改配置,是重写关键链路:
- 先更新
package.json:把vue升到^3.2.0,@dcloudio/uni-app升到^3.0.0,然后npm install - 重写
src/main.js:替换为createSSRApp(App),删掉所有Vue.prototype.xxx注入 - 页面逻辑迁移:
data/methods全部转setup()+ref/reactive,this.$refs改用template ref - 微信小程序平台需检查基础库 ≥
2.24.2,否则响应式失效(尤其ref值不更新视图)
manifest.json 里那个 vueVersion 字段,只建议在新建项目时作为可视化参考,一旦项目落地,它就彻底沦为摆设。
最常被忽略的一点:HBuilderX 图形界面新建项目时若漏选“使用 Vue3”,删项目重来比硬改强十倍——因为模板差异渗透到 babel.config.js、vue.config.js、甚至 pages.json 的条件编译逻辑里,靠改 manifest.json 根本扫不干净。

















