W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
微信客戶端 6.6.0,基礎(chǔ)庫 1.7.3 及以上版本開始支持。開發(fā)者工具請使用 1.01.1712150 及以上版本,可點(diǎn)此下載。
某些情況下,開發(fā)者需要將小程序劃分成不同的子包,在構(gòu)建時打包成不同的分包,用戶在使用時按需進(jìn)行加載。
在構(gòu)建小程序分包項(xiàng)目時,構(gòu)建會輸出一個或多個分包。每個使用分包小程序必定含有一個主包。所謂的主包,即放置默認(rèn)啟動頁面/TabBar 頁面,以及一些所有分包都需用到公共資源/JS 腳本;而分包則是根據(jù)開發(fā)者的配置進(jìn)行劃分。
在小程序啟動時,默認(rèn)會下載主包并啟動主包內(nèi)頁面,當(dāng)用戶進(jìn)入分包內(nèi)某個頁面時,客戶端會把對應(yīng)分包下載下來,下載完成后再進(jìn)行展示。
目前小程序分包大小有以下限制:
對小程序進(jìn)行分包,可以優(yōu)化小程序首次啟動的下載時間,以及在多團(tuán)隊(duì)共同開發(fā)時可以更好的解耦協(xié)作。
具體使用方法請參考:
假設(shè)支持分包的小程序目錄結(jié)構(gòu)如下:
├── app.js
├── app.json
├── app.wxss
├── packageA
│ └── pages
│ ├── cat
│ └── dog
├── packageB
│ └── pages
│ ├── apple
│ └── banana
├── pages
│ ├── index
│ └── logs
└── utils
開發(fā)者通過在 app.json subpackages 字段聲明項(xiàng)目分包結(jié)構(gòu):
寫成 subPackages 也支持。
{
"pages":[
"pages/index",
"pages/logs"
],
"subpackages": [
{
"root": "packageA",
"pages": [
"pages/cat",
"pages/dog"
]
}, {
"root": "packageB",
"name": "pack2",
"pages": [
"pages/apple",
"pages/banana"
]
}
]
}
subpackages 中,每個分包的配置有以下幾項(xiàng):
字段 | 類型 | 說明 |
---|---|---|
root | String | 分包根目錄 |
name | String | 分包別名,分包預(yù)下載時可以使用 |
pages | StringArray | 分包頁面路徑,相對與分包根目錄 |
independent | Boolean | 分包是否是獨(dú)立分包 |
由微信后臺編譯來處理舊版本客戶端的兼容,后臺會編譯兩份代碼包,一份是分包后代碼,另外一份是整包的兼容代碼。 新客戶端用分包,老客戶端還是用的整包,完整包會把各個 subpackage 里面的路徑放到 pages 中。
微信客戶端 6.7.2,基礎(chǔ)庫 2.3.0 及以上版本開始支持。開發(fā)者工具請使用 1.02.1808300 及以上版本,可點(diǎn)此下載。
獨(dú)立分包是小程序中一種特殊類型的分包,可以獨(dú)立于主包和其他分包運(yùn)行。從獨(dú)立分包中頁面進(jìn)入小程序時,不需要下載主包。當(dāng)用戶進(jìn)入普通分包或主包內(nèi)頁面時,主包才會被下載。
開發(fā)者可以按需將某些具有一定功能獨(dú)立性的頁面配置到獨(dú)立分包中。當(dāng)小程序從普通的分包頁面啟動時,需要首先下載主包;而獨(dú)立分包不依賴主包即可運(yùn)行,可以很大程度上提升分包頁面的啟動速度。
一個小程序中可以有多個獨(dú)立分包。
小游戲不支持獨(dú)立分包。
假設(shè)小程序目錄結(jié)構(gòu)如下:
├── app.js
├── app.json
├── app.wxss
├── moduleA
│ └── pages
│ ├── rabbit
│ └── squirrel
├── moduleB
│ └── pages
│ ├── pear
│ └── pineapple
├── pages
│ ├── index
│ └── logs
└── utils
開發(fā)者通過在app.json的subpackages字段中對應(yīng)的分包配置項(xiàng)中定義independent字段聲明對應(yīng)分包為獨(dú)立分包。
{
"pages": [
"pages/index",
"pages/logs"
],
"subpackages": [
{
"root": "moduleA",
"pages": [
"pages/rabbit",
"pages/squirrel"
]
}, {
"root": "moduleB",
"pages": [
"pages/pear",
"pages/pineapple"
],
"independent": true
}
]
}
獨(dú)立分包屬于分包的一種。普通分包的所有限制都對獨(dú)立分包有效。獨(dú)立分包中插件、自定義組件的處理方式同普通分包。
此外,使用獨(dú)立分包時要注意:
與普通分包不同,獨(dú)立分包運(yùn)行時,App 并不一定被注冊,因此 getApp() 也不一定可以獲得 App 對象:
由于這一限制,開發(fā)者無法通過 App 對象實(shí)現(xiàn)獨(dú)立分包和小程序其他部分的全局變量共享。
為了在獨(dú)立分包中滿足這一需求,基礎(chǔ)庫 2.2.4 版本開始 getApp支持 [allowDefault]參數(shù),在 App 未定義時返回一個默認(rèn)實(shí)現(xiàn)。當(dāng)主包加載,App 被注冊時,默認(rèn)實(shí)現(xiàn)中定義的屬性會被覆蓋合并到真正的 App 中。
示例代碼:
const app = getApp({allowDefault: true}) // {}
app.data = 456
app.global = {}
App({
data: 123,
other: 'hello'
})
console.log(getApp()) // {global: {}, data: 456, other: 'hello'}
當(dāng)從獨(dú)立分包啟動小程序時,主包中 App 的 onLaunch 和首次 onShow 會在從獨(dú)立分包頁面首次進(jìn)入主包或其他普通分包頁面時調(diào)用。
由于獨(dú)立分包中無法定義 App,小程序生命周期的監(jiān)聽可以使用 wx.onAppShow,wx.onAppHide 完成。App 上的其他事件可以使用 wx.onError,wx.onPageNotFound 監(jiān)聽。
在低于6.7.2版本的微信中運(yùn)行時,獨(dú)立分包視為普通分包處理,不具備獨(dú)立運(yùn)行的特性。
注意:在兼容模式下,主包中的 app.wxss 可能會對獨(dú)立分包中的頁面產(chǎn)生影響,因此應(yīng)避免在獨(dú)立分包頁面中使用 app.wxss 中的樣式。
基礎(chǔ)庫 2.3.0 開始支持,低版本需做兼容處理。 開發(fā)者工具請使用 1.02.1808300 及以上版本,可點(diǎn)此下載。
開發(fā)者可以通過配置,在進(jìn)入小程序某個頁面時,由框架自動預(yù)下載可能需要的分包,提升進(jìn)入后續(xù)分包頁面時的啟動速度。對于獨(dú)立分包,也可以預(yù)下載主包。
分包預(yù)下載目前只支持通過配置方式使用,暫不支持通過調(diào)用API完成。
vConsole 里有preloadSubpackages開頭的日志信息,可以用來驗(yàn)證預(yù)下載的情況。
預(yù)下載分包行為在進(jìn)入某個頁面時觸發(fā),通過在 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__"]
}
}
}
preloadRule 中,key 是頁面路徑,value 是進(jìn)入此頁面的預(yù)下載配置,每個配置有以下幾項(xiàng):
字段 | 類型 | 必填 | 默認(rèn)值 | 說明 |
---|---|---|---|---|
packages | StringArray | 是 | 無 | 進(jìn)入頁面后預(yù)下載分包的 root 或 name 。__APP__ 表示主包。 |
network | String | 否 | wifi | 在指定網(wǎng)絡(luò)下預(yù)下載,可選值為:
all : 不限網(wǎng)絡(luò)
wifi : 僅wifi下預(yù)下載 |
同一個分包中的頁面享有共同的預(yù)下載大小限額 2M,限額會在工具中打包時校驗(yàn)。
如,頁面 A 和 B 都在同一個分包中,A 中預(yù)下載總大小 0.5M 的分包,B中最多只能預(yù)下載總大小 1.5M 的分包。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: