uni-app给页面或组件加构造器后,局部或全局注册的组件运行时找不到的问题

uni-app给页面或组件加构造器后,局部或全局注册的组件运行时找不到的问题

页面或者组件,都是一个vue文件,导出一个对象,

为了抽离一些业务,我弄了一个方法,对这个对象进行一些加工处理,然后返回出去。

import comConfirm from '../../../components/com-confirm/com-confirm'  

export default loadModule([pageCacheSetup], {  
  components: { comConfirm},  
  data() {  
    return {  

    }  
  },  
  onload(){  

  }  
})

但是这样做,局部或全局注册组件的方式,在运行时报错找不到组件; easycom的方式却不会有问题;一直以来我都是用easycom的方式; 直到现在,包的体积过大,需要把一些组件放入分包,这样无法使用easycom

给页面对象附加方法,编译的代码是有问题的,我之前比较过。 不知道有什么解决办法, 或者编译器进行优化

这个问题之前提过没有人回复, https://ask.dcloud.net.cn/question/117824

https:https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20210226/bdfa1aaa86fdb395ed8ab4b71effe9db.jpg

通过以前的贴图可以看出,组件被当成普通js模块引入了。代码编译器没有把components属性当作组件注册去解析


更多关于uni-app给页面或组件加构造器后,局部或全局注册的组件运行时找不到的问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

更多关于uni-app给页面或组件加构造器后,局部或全局注册的组件运行时找不到的问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个问题是由于 uni-app 编译器在构建时无法正确识别通过函数封装返回的组件配置对象中的 components 字段。编译器在静态分析阶段没有将 comConfirm 解析为组件依赖,而是当作普通 JavaScript 模块处理,导致运行时组件未注册。

解决方案:

  1. 显式注册组件
    在页面或组件的脚本中直接使用 Vue.componentthis.$options.components 进行动态注册:

    import comConfirm from '../../../components/com-confirm/com-confirm.vue';
    export default {
      created() {
        this.$options.components.comConfirm = comConfirm;
      }
    };
    
  2. 修改构建逻辑
    将组件路径改为绝对路径或调整 loadModule 函数,在编译阶段明确标记组件依赖:

    // 在 loadModule 中显式声明组件
    export default loadModule([pageCacheSetup], {
      components: { 
        comConfirm: () => import('@/components/com-confirm/com-confirm.vue')
      }
    });
    
  3. 分包组件处理
    对于分包中的组件,使用动态导入(import())并确保路径正确:

    components: {
      comConfirm: () => import('./subpackage/components/com-confirm.vue')
    }
回到顶部