更新时间:2022-12-12 15:28:38收藏订阅更新我的文档设置返回文档介绍在小程序中,不同的分包对应着不同的下载单元;因此,当分包之间共享引用了某个自定义组件或require某个 js 模块,最终这些组件和js模块都会被打进 主包,这样才能保证分包加载后功能都可以正常使用,但是这样处理会增加主包的体积,从而影响启动性能。分包异步化特性将允许通过一些配置和新的接口,使部分跨分包的内容可以等待下载后异步使用,从而一定程度上减少主包的大小。版本要求●ide 3.3.2 及以上版本。●仅使用 js模块 需要基础库 2.x。●仅使用 组件 需要基础库 2.8.2 以上。使用方法跨分包自定义组件引用一个分包使用其它分包的自定义组件时,由于其它分包还未下载或注入,其它分包的组件处于不可用的状态。通过为其它分包的自定义组件设置 占位组件,可以先渲染占位组件作为替代,在分包下载完成后再进行替换。例如:json复制代码9912345678910// subpackagea/pages/index.json{ "usingcomponents": { "list": "../../subpackageb/components/full-list", "simple-list": "../components/simple-list" }, "componentplaceholder": { "list": "simple-list" }}在这个配置中, list 这个自定义组件是跨分包引用组件,在渲染时,list 会使用当前分包内的自定义组件 simple-list 作为替代进行渲染;在 subpackageb 这个分包下载完成后,占位组件就会被替换为对应的跨分包组件。可以使用 my.onlazyloaderror 监听加载事件。跨分包 js 代码引用一个分包中的代码引用其它分包的代码时,为了不让下载阻塞代码运行,需要异步获取引用的结果。例如:9912345678910111213// subpackagea/index.js// 使用回调函数风格的调用require('../subpackageb/utils.js', utils => { console.log(utils.whoami) // alipay 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}`)})常见问题分包异步化的接入成本高不高?分包异步化完全兼容历史写法,可以实现渐进式接入。●js 模块只有使用了 require.async / callback 进行引用 ,才会进行异步化处理。●组件必须显式声明 占位组件,才会被异步化处理。●分包异步化处理,是对单个组件/js模块的细颗粒度处理,不会影响当前分包的其它模块。