小程序 - 分包加載上限8M(一)

使用分包

配置方法

假設支持分包的小程序目錄結構以下json





開發者經過在 app.json  字段聲明項目分包結構:
寫成 subPackages 也支持。

├── app.js ├── app.json ├── app.wxss ├── packageA │   └── pages │   ├── cat │   └── dog ├── packageB │   └── pages │   ├── apple │   └── banana ├── pages │   ├── index │   └── logs └── utilssubpackages
{
  "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 沒法 require packageB JS 文件,但能夠 require app、本身 package 內的 JS 文件
  • packageA 沒法 import packageB 的 template,但能夠 require app、本身 package 內的 template
  • packageA 沒法使用 packageB 的資源,但可使用 app、本身 package 內的資源
 

低版本兼容

由微信後臺編譯來處理舊版本客戶端的兼容,後臺會編譯兩份代碼包,一份是分包後代碼,另一份是整包的兼容代碼。 新客戶端用分包,老客戶端仍是用的整包,完整包會把各個 subpackage 裏面的路徑放到 pages 中。小程序


示例代碼:分包使用主包js,其它的同理


app.json
{
  "pages": [
    "pages/login/login" 
  ],
  "subPackages": [
    {
      "root": "package-aaa",
      "pages": [
        "pages/home/home"
      ]
    },
    {
      "root": "package-bbb",
      "pages": [
        "pages/goods/goods",
        "pages/order/order"
      ]
    }
  ],
  "window": {
    "backgroundTextStyle": "light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "分包",
    "navigationBarTextStyle": "black"
  }
}

 

logon.xml
 
<button type="primary" bindtap="shopGoods"> shopGoods </button>

 


login.js
shopGoods: function (e) {
    // 
    if (e) {
      wx.navigateTo({
        url: '/package-bbb/pages/goods/goods'
      })
    }
  },

 


跳轉分包,,分包獲取公共數據


goods.xml
 
<text>
    {{time}}
</text>


goods.js
const util = require('../../../utils/util.js')
const _api = require('../../../utils/api.js')
Page({

  /**
   * 頁面的初始數據
   */
  data: {
    time: '',
    env:''
  },

  /**
   * 生命週期函數--監聽頁面加載
   */
  onLoad: function (options) {
    let _time = new Date();
    let t = util.formatTime(_time) 
    this.setData({
      time: t  
    })
  },

 

顯示結果:api

相關文章
相關標籤/搜索