UniApp 分包异步化配置及组件引用解决方案

具体参考微信小程序文档基础能力 / 分包加载 / 分包异步化

一、分包页面组件配置

在 UniApp 的pages.json中,为分包页面(或主包如 tabbar 页面)配置异步组件时,需同时设置usingComponentscomponentPlaceholder

javascript 复制代码
{
  "path": "pages/smart/index",
  "style": {
    "navigationBarTitleText": "智能家居",
    "disableScroll": true,
    "backgroundColor": "#F9FAFB",
    "backgroundColorContent": "#F9FAFB",
    "backgroundColorTop": "#F9FAFB",
    "backgroundColorBottom": "#F9FAFB",
    // 声明需要引入的异步组件
    "usingComponents": {
      "smart-device-detail": "/pages/smart/sub/components/smartDeviceDetail",
      "normal-device-detail": "/pages/smart/sub/components/normalDeviceDetail"
    },
    // 组件未加载完成时的占位组件
    "componentPlaceholder": {
      "smart-device-detail": "view",
      "normal-device-detail": "view"
    }
  }
}

解决组件找不到的问题

直接上述配置可能导致 "组件找不到" 报错,原因是 UniApp 的摇树优化会过滤未在页面中显式引入的组件。

解决方案:在对应的分包页面内手动引入组件

二、跨分包 JS 代码引用

跨分包引用 JS 可直接使用微信小程序的语法,支持两种方式:

javascript 复制代码
// subPackageA/index.js
// 使用回调函数风格的调用
require('../subPackageB/utils.js', utils => {
  console.log(utils.whoami) // Wechat MiniProgram
}, ({mod, errMsg}) => {
  console.error(`path: ${mod}, ${errMsg}`)
})
// 或者使用 Promise 风格的调用
require.async('../commonPackage/index.js').then(pkg => {
  pkg.getPackageName() // 'common'
}).catch(({mod, errMsg}) => {
  console.error(`path: ${mod}, ${errMsg}`)
})
相关推荐
我命由我1234515 小时前
微信小程序 - 避免在 data 初始化中引用全局变量
开发语言·前端·javascript·微信小程序·小程序·前端框架·js
骨子里的偏爱16 小时前
uniapp实现数据存储到本地文件,除非卸载app,否则数据一直存在
javascript·chrome·uni-app
我命由我1234518 小时前
微信小程序 bind:tap 与 bindtap 的区别
开发语言·前端·javascript·微信小程序·小程序·前端框架·js
_Jyann_19 小时前
uniapp两种方式实现自定义tabbar
前端·javascript·uni-app
郑州光合科技余经理19 小时前
PHP技术栈:上门系统海外版开发与源码解析
java·开发语言·javascript·git·uni-app·php·uniapp
2501_9159214320 小时前
Fiddler抓包工具详解,HTTPHTTPS调试、代理配置与接口分析实战教程
服务器·ios·小程序·fiddler·uni-app·php·webview
undsky20 小时前
【RuoYi-SpringBoot3-UniApp】:一套代码,多端运行的移动端开发方案
前端·uni-app
diygwcom20 小时前
UniApp 鸿蒙NEXT蓝牙连接及数据写入
华为·uni-app·harmonyos
我命由我1234521 小时前
微信小程序 - 页面跳转并传递参数(使用路由参数、使用全局变量、使用本地存储、使用路由参数结合本地存储)
开发语言·前端·javascript·微信小程序·小程序·前端框架·js