假設支持分包的小程序目錄結構以下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(主包) 中subpackage
的根目錄不能是另一個 subpackage
內的子目錄tabBar
頁面必須在 app(主包)內packageA
沒法 require packageB
JS 文件,但能夠 require app
、本身 package 內的 JS 文件packageA
沒法 import packageB
的 template,但能夠 require app
、本身 package 內的 templatepackageA
沒法使用 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