百度智能小程序 獨(dú)立分包

2020-09-03 16:14 更新
基礎(chǔ)庫 3.60.2 及以上版本開始支持。開發(fā)者工具請(qǐng)使用 2.2.9 及以上版本,可點(diǎn)此下載
  • 獨(dú)立分包是小程序中一種特殊類型的分包,可以獨(dú)立于主包和其他分包運(yùn)行。從獨(dú)立分包中頁面進(jìn)入小程序時(shí),不需要下載主包。當(dāng)用戶進(jìn)入普通分包或主包內(nèi)頁面時(shí),主包才會(huì)被下載。
  • 開發(fā)者可以按需將某些具有一定功能獨(dú)立性的頁面配置到獨(dú)立分包中。當(dāng)小程序從普通的分包頁面啟動(dòng)時(shí),需要首先下載主包;而獨(dú)立分包不依賴主包即可運(yùn)行,可以很大程度上提升分包頁面的啟動(dòng)速度。
  • 一個(gè)小程序中可以有多個(gè)獨(dú)立分包。
TIPS:
1.小游戲不支持獨(dú)立分包。
2.目前暫不支持在獨(dú)立分包中使用動(dòng)態(tài)庫。

配置方法

假設(shè)小程序目錄結(jié)構(gòu)如下:

├── app.js
├── app.json
├── app.css
├── moduleA
│   └── pages
│       ├── history
│       └── search
├── moduleB
│   └── pages
│       ├── counter
│       └── goods
├── pages
│   ├── index
│   └── logs
└── utils

開發(fā)者通過在 app.json 的 subPackages 字段中對(duì)應(yīng)的分包配置項(xiàng)中定義 independent 字段聲明對(duì)應(yīng)分包為獨(dú)立分包。

{
  "pages": [
      "pages/index",
      "pages/logs"
   ],
  "subPackages": [
    {
      "root": "moduleA",
      "pages": [
          "pages/history",
          "pages/search"
       ]
    },
    {
      "root": "moduleB",
      "pages": [
          "pages/counter",
          "pages/goods"
       ],
      "independent": true
    }
  ]
}

限制

獨(dú)立分包屬于分包的一種。普通分包的所有限制都對(duì)獨(dú)立分包有效。獨(dú)立分包中自定義組件的處理方式同普通分包。

此外,使用獨(dú)立分包時(shí)要注意:

  • 獨(dú)立分包中不能依賴主包和其他分包中的內(nèi)容,包括 js 文件、template、css、自定義組件等。主包中的app.css對(duì)獨(dú)立分包無效,應(yīng)避免在獨(dú)立分包頁面中使用app.css中的樣式;
  • App 只能在主包內(nèi)定義,獨(dú)立分包中不能定義 App,會(huì)造成無法預(yù)期的行為。

注意事項(xiàng)

(1)關(guān)于 getApp

與普通分包不同,獨(dú)立分包運(yùn)行時(shí),App并不一定被注冊(cè),因此getApp也不一定可以獲得App對(duì)象:

  • 當(dāng)用戶從獨(dú)立分包頁面啟動(dòng)小程序時(shí),主包是不存在的,那么App也不存在,此時(shí)調(diào)用getApp獲取到的是undefined。 當(dāng)用戶進(jìn)入普通分包或主包內(nèi)頁面時(shí),主包才會(huì)被下載,App才會(huì)被注冊(cè);
  • 當(dāng)用戶是從普通分包或主包內(nèi)頁面跳轉(zhuǎn)到獨(dú)立分包頁面時(shí),主包已經(jīng)存在,此時(shí)調(diào)用 getApp 可以獲取到真正的 App 實(shí)例。由于這一限制,開發(fā)者無法通過App方法實(shí)現(xiàn)獨(dú)立分包和小程序其它部分的全局變量共享。

為了在獨(dú)立分包中滿足這一需求,基礎(chǔ)庫3.60.2版本開始getApp支持[allowDefault]參數(shù),在App未定義時(shí)返回一個(gè)默認(rèn)實(shí)現(xiàn)。當(dāng)主包加載,App被注冊(cè)時(shí),默認(rèn)實(shí)現(xiàn)中定義的屬性會(huì)被覆蓋合并到真正的App中。

代碼示例

  • 獨(dú)立分包中
const app = getApp({allowDefault: true}); // {}
app.data = 456;
app.global = {};
  • app.js 中
App({
    data: 123,
    from: 'swan'
});

console.log(getApp()); // {global: {}, data: 456, from: 'swan'}

(2)關(guān)于 App 生命周期

當(dāng)從獨(dú)立分包啟動(dòng)小程序時(shí),主包中 App 的 onLaunch 和首次 onShow 會(huì)在從獨(dú)立分包頁面首次進(jìn)入主包或其他普通分包頁面時(shí)調(diào)用;由于獨(dú)立分包中無法定義 App,小程序生命周期的監(jiān)聽可以使用 swan.onAppShow, swan.onAppHide 完成。App 上的其它事件可以使用 swan.onError,swan.onPageNotFound 監(jiān)聽。

低版本兼容:

  • 在低于3.60.2的基礎(chǔ)庫版本運(yùn)行時(shí),獨(dú)立分包視為普通分包處理,不具備獨(dú)立運(yùn)行的特性;
  • 在兼容模式下,主包中的 app.css 可能會(huì)對(duì)獨(dú)立分包中的頁面產(chǎn)生影響,因此應(yīng)避免在獨(dú)立分包頁面中使用 app.css 中的樣式。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)