dcloudio / uni-app

A cross-platform framework using Vue.js
https://uniapp.dcloud.io
Apache License 2.0
40.09k stars 3.63k forks source link

vue3+ts开发的项目打成分包并入旧项目报TypeError: t.$callHook is not a function 错误 #4422

Open yeyifen opened 1 year ago

yeyifen commented 1 year ago

问题描述 [问题描述:尽可能简洁清晰地把问题描述清楚] vue3+ts开发的项目打成分包并入旧项目报TypeError: t.$callHook is not a function 错误

复现步骤 [复现问题的步骤] 1、通过 vue create -p ./uni-preset-vue v2 创建vue2的项目(网络问题,直接在github下载并通过这种本地方式创建的项目),并执行 yarn;yarn build:mp-weixin; 编译好小程序包; 2、下载 https://github.com/dcloudio/uni-preset-vue vite-ts 分支的模板,执行 yarn 安装好依赖,再执行 yarn build:mp-weixin --subpackage=car3 打成分包; 3、将上一步生成的 car3 文件夹移动到步骤1生成的 /dist/build/mp-weixin/ (以下简称v2),并修改v2的app.json 文件,加入分包路由:

"subPackages": [
    {
      "root": "car3",
      "pages": [
        "pages/index/index"
      ]
    }
  ],

4、打开微信小程序开发者工具,导入v2项目,通过添加编译模式直接输入 car3/pages/index/index 路径访问该页面;

[或者可以直接贴源代码]

预期结果 可以正常访问该页面,不会报错

实际结果 页面访问正常,但会报 TypeError: t.$callHook is not a function 的错误 image

系统信息:

补充信息 [可选] [根据你的分析,出现这个问题的原因可能在哪里?] 猜测是通过 --subpackage=car3 参数打分包时,vue3打包配置出了问题

yeyifen commented 1 year ago

补充下:打成分包后,并入微信提供的原生小程序项目,也是报一样的错误,所以应该是 --subpackage=car3 这个打分包的参数出bug了,而用 vue2版本的uniapp打的分包就不会报错

shangyifei commented 11 months ago

我也遇到这个问题了,请问如何解决

llllllllllx commented 8 months ago

对比了下两个版本,vue3的版本里onLaunch才执行initBaseInstance才会赋值$callHook = callHook函数,但appShow的时候比onLaunch早,就会报错,vue2的版本是直接就初始化 image 所以我这里试ok的改动方法是把initBaseInstance函数移到onLaunch外,直接赋值,就ok了,但不知道会不会有什么其他的问题 image

但是会有个问题initBaseInstance函数会被执行两次,也不知道是不是正确的逻辑

bxm0927 commented 7 months ago

我们也遇到同样问题,有官方出来解答下怎么解决吗

luck-hao commented 5 months ago

同样的问题,请问官方啥时候解决哦