限制在2M以內。如果超過2M,可以通過分包加載實現,在app.json中配置即可,
小程序划分成不同的子包,在構建時打包成不同的分包,用戶在使用時按需進行加載。
在構建小程序分包項目時,構建會輸出一個或多個分包。每個使用分包小程序必定含有一個主包。所謂的主包,即放置默認啟動頁面/TabBar 頁面,以及一些所有分包都需用到公共資源/JS 腳本;而分包則是根據開發者的配置進行划分。
在小程序啟動時,默認會下載主包並啟動主包內頁面,當用戶進入分包內某個頁面時,客戶端會把對應分包下載下來,下載完成后再進行展示。
目前小程序分包大小有以下限制:
- 整個小程序所有分包大小不超過 8M
- 單個分包/主包大小不能超過 2M
對小程序進行分包,可以優化小程序首次啟動的下載時間,以及在多團隊共同開發時可以更好的解耦協作。
{ "pages":[ "pages/index", "pages/logs" ], "subpackages": [ { "root": "packageA", "pages": [ "pages/cat", "pages/dog" ] }, { "root": "packageB", "name": "pack2", "pages": [ "pages/apple", "pages/banana" ] } ] }
打包原則
- 聲明
subpackages
后,將按subpackages
配置路徑進行打包,subpackages
配置路徑外的目錄將被打包到 app(主包) 中 - app(主包)也可以有自己的 pages(即最外層的 pages 字段)
subpackage
的根目錄不能是另外一個subpackage
內的子目錄tabBar
頁面必須在 app(主包)內
引用原則
packageA
無法 requirepackageB
JS 文件,但可以 requireapp
、自己 package 內的 JS 文件packageA
無法 importpackageB
的 template,但可以 requireapp
、自己 package 內的 templatepackageA
無法使用packageB
的資源,但可以使用app
、自己 package 內的資源
獨立分包是小程序中一種特殊類型的分包,可以獨立於主包和其他分包運行。從獨立分包中頁面進入小程序時,不需要下載主包。當用戶進入普通分包或主包內頁面時,主包才會被下載。
開發者可以按需將某些具有一定功能獨立性的頁面配置到獨立分包中。當小程序從普通的分包頁面啟動時,需要首先下載主包;而獨立分包不依賴主包即可運行,可以很大程度上提升分包頁面的啟動速度。
一個小程序中可以有多個獨立分包。
使用獨立分包時要注意:
- 獨立分包中不能依賴主包和其他分包中的內容,包括js文件、template、wxss、自定義組件、插件等。主包中的
app.wxss
對獨立分包無效,應避免在獨立分包頁面中使用app.wxss
中的樣式; App
只能在主包內定義,獨立分包中不能定義App
,會造成無法預期的行為;- 獨立分包中暫時不支持使用插件。
關於 getApp()
與普通分包不同,獨立分包運行時,App
並不一定被注冊,因此 getApp()
也不一定可以獲得 App
對象:
- 當用戶從獨立分包頁面啟動小程序時,主包不存在,
App
也不存在,此時調用getApp()
獲取到的是undefined
。 當用戶進入普通分包或主包內頁面時,主包才會被下載,App
才會被注冊。 - 當用戶是從普通分包或主包內頁面跳轉到獨立分包頁面時,主包已經存在,此時調用
getApp()
可以獲取到真正的App
。
由於這一限制,開發者無法通過 App
對象實現獨立分包和小程序其他部分的全局變量共享。
為了在獨立分包中滿足這一需求,基礎庫 2.2.4 版本開始 getApp
支持 [allowDefault
]參數,在 App
未定義時返回一個默認實現。當主包加載,App
被注冊時,默認實現中定義的屬性會被覆蓋合並到真正的 App
中。
當從獨立分包啟動小程序時,主包中 App
的 onLaunch
和首次 onShow
會在從獨立分包頁面首次進入主包或其他普通分包頁面時調用。
由於獨立分包中無法定義 App
,小程序生命周期的監聽可以使用 wx.onAppShow,wx.onAppHide 完成。App
上的其他事件可以使用 wx.onError,wx.onPageNotFound 監聽
預下載分包行為在進入某個頁面時觸發,通過在 app.json
增加 preloadRule
配置來控制。
{ "pages": ["pages/index"], "subpackages": [ { "root": "important", "pages": ["index"], }, { "root": "sub1", "pages": ["index"], }, { "name": "hello", "root": "path/to", "pages": ["index"] }, { "root": "sub3", "pages": ["index"] }, { "root": "indep", "pages": ["index"], "independent": true } ], "preloadRule": { "pages/index": { "network": "all", "packages": ["important"] }, "sub1/index": { "packages": ["hello", "sub3"] }, "sub3/index": { "packages": ["path/to"] }, "indep/index": { "packages": ["__APP__"] } } }
限制
同一個分包中的頁面享有共同的預下載大小限額 2M,限額會在工具中打包時校驗。
如,頁面 A 和 B 都在同一個分包中,A 中預下載總大小 0.5M 的分包,B中最多只能預下載總大小 1.5M 的分包。