uni-app vue版本选择vue3时编译到微信小程序目前发现的bug

uni-app vue版本选择vue3时编译到微信小程序目前发现的bug

开发环境 版本号 项目创建方式
Mac macOS Big Sur 11.5.2 HBuilderX

操作步骤:

  1. vue3版本下,编译到微信小程序,main.js中如果初始化使用到uni的api报错,如:

    let sys=uni.getSystemInfoSync()
    

    错误信息:

    TypeError: Cannot read property 'getSystemInfoSync' of undefined。。。
    
  2. vue3版本下,组件中使用behaviors编译到微信小程序报错,如

    behaviors: ['uni://form-field']
    

    错误信息:

    ReferenceError: __PLATFORM_PREFIX__ is not defined ...
    

预期结果:

编译通过,正常运行

实际结果:

出错导致无法运行

bug描述:

  1. vue3版本下,编译到微信小程序,main.js中如果初始化使用到uni的api报错,如:

    let sys=uni.getSystemInfoSync()
    

    错误信息:

    TypeError: Cannot read property 'getSystemInfoSync' of undefined。。。
    
  2. vue3版本下,组件中使用behaviors编译到微信小程序报错,如

    behaviors: ['uni://form-field']
    

    错误信息:

    ReferenceError: __PLATFORM_PREFIX__ is not defined ...
    

更多关于uni-app vue版本选择vue3时编译到微信小程序目前发现的bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

更新至最新的HBuilderX Alpha

更多关于uni-app vue版本选择vue3时编译到微信小程序目前发现的bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html


以上错误信息在微信小程序开发工具中提示

现在这个问题解决了吗?我也遇到了

把uni改成wx就正常了 切换vue3运行后uni没有转换 还是用回vue2稳定

behaviors不行

这两个问题确实是 uni-app 在 Vue 3 模式下编译到微信小程序时存在的已知问题。

问题1:main.js 中 uni API 调用报错

这是因为在 Vue 3 项目的初始化阶段,uni 对象尚未挂载完成。解决方案是避免在 main.js 的顶层作用域直接调用 uni API,可以将相关逻辑移至 App.vueonLaunch 生命周期中:

// App.vue
export default {
  onLaunch() {
    let sys = uni.getSystemInfoSync()
    // 后续初始化逻辑
  }
}

如果必须在 main.js 中执行,可以改用条件判断或延迟执行:

// main.js
if (typeof uni !== 'undefined') {
  let sys = uni.getSystemInfoSync()
}
// 或使用 setTimeout 延迟执行

问题2:behaviors 编译错误

__PLATFORM_PREFIX__ 未定义错误是因为 Vue 3 编译器对 behaviors 的处理机制与 Vue 2 不同。临时解决方案是改用完整的平台前缀:

// 将
behaviors: ['uni://form-field']

// 改为
behaviors: ['wx://form-field'] // 微信小程序平台

或者使用条件编译:

behaviors: [/*#ifdef MP-WEIXIN*/'wx://form-field'/*#endif*/]
回到顶部