專案結構、生命週期及套裝組合

迷你應用程式專案結構

如同前述的標記語言、樣式語言和元件,迷你應用程式專案結構的詳細資料 (例如檔案副檔名或預設名稱) 也各不相同。不過,所有超級應用程式供應商的整體概念都相同。專案結構一律包含下列內容:

  • 初始化迷你應用程式的根檔案 app.js
  • 設定檔 app.json「大致」對應到 網頁應用程式資訊清單
  • 選用的通用樣式表檔案 app.css,具有共用的預設樣式。
  • 包含版本資訊的 project.config.json 檔案。

所有網頁都儲存在 pages 資料夾中的個別子資料夾中。每個頁面子資料夾都包含 CSS 檔案、JS 檔案、HTML 檔案和選用的 JSON 設定檔除了檔案副檔名外,所有檔案的名稱都必須與包含該檔案的資料夾相同。同樣地,迷你應用程式只需要 app.json 檔案 (類似資訊清單的檔案) 中目錄的指標,就能動態尋找所有子資源。從網頁開發人員的角度來看,迷你應用程式就是多頁應用程式。

├── app.js               # Initialization logic
├── app.json             # Common configuration
├── app.css              # Common style sheet
├── project.config.json  # Project configuration
└── pages                # List of pages
   ├── index               # Home page
      ├── index.css         # Page style sheet
      ├── index.js          # Page logic
      ├── index.json        # Page configuration
      └── index.html        # Page markup
   └── other               # Other page
       ├── other.css         # Page style sheet
       ├── other.js          # Page logic
       ├── other.json        # Page configuration
       └── other.html        # Page markup

迷你應用程式生命週期

微型應用程式必須透過呼叫全域定義的 App() 方法,向超級應用程式註冊。請參考之前列出的專案結構, app.js。最小的應用程式生命週期主要包含四個事件:launchshowhideerror。這些事件的處理常式可採用以下格式,傳遞至 App() 方法: 設定物件,該物件也可包含 globalData 屬性,該屬性存放了 適用於所有網頁

/* app.js */
App({
  onLaunch(options) {
    // Do something when the app is launched initially.
  },
  onShow(options) {
    // Do something when the app is shown.
  },
  onHide() {
    // Do something when the app is hidden.
  },
  onError(msg) {
    console.log(msg);
  },
  globalData: "I am global data",
});

每一項細節都不一樣,但概念都相同 WeChat Alipay百度 ByteDance, 以及 快速應用程式

網頁生命週期

與應用程式生命週期類似,頁面生命週期也有生命週期事件,開發人員可以監聽這些事件並做出回應。這些核心事件為 loadshowreadyhideunload。只有部分通知 平台還提供額外事件,例如 pulldownrefresh。設定事件處理常式的動作發生在 為每個網頁定義的 Page() 方法。針對來自以下網址的 indexother 頁面, 建立專案結構「之前」,則會在 index.jsother.js

/* index.js */
Page({
  data: {
    text: "This is page data.",
  },
  onLoad: function (options) {
    // Do something when the page is initially loaded.
  },
  onShow: function () {
    // Do something when the page is shown.
  },
  onReady: function () {
    // Do something when the page is ready.
  },
  onHide: function () {
    // Do something when the page is hidden.
  },
  onUnload: function () {
    // Do something when the page is closed.
  },
  onPullDownRefresh: function () {
    // Do something when the user pulls down to refresh.
  },
  onReachBottom: function () {
    // Do something when the user scrolls to the bottom.
  },
  onShareAppMessage: function () {
    // Do something when the user shares the page.
  },
  onPageScroll: function () {
    // Do something when the user scrolls the page.
  },
  onResize: function () {
    // Do something when the user resizes the page.
  },
  onTabItemTap(item) {
    // Do something when the user taps the page's tab.
  },
  customData: {
    foo: "bar",
  },
});

建構程序

而迷你應用程式的建構程序則由開發人員簡化。但實際上 Babel 編譯器等業界工具 postcss CSS 轉換器。這個建構體驗與 Next.jscreate-react-app 相當類似,開發人員可以選擇不接觸建構參數。產生的已處理檔案 最後是經過簽署、加密,並封裝在一或多個 (子) 套件中,接著上傳作業便會完成 傳送到超級應用程式供應商的伺服器子套件適用於延遲載入,因此小型應用程式 不必一次全部下載包裝詳細資訊屬於機密資訊,因此未記錄在文件中,但 WeChat 的 wxapkg 格式等部分套件格式已進行逆向工程

特別銘謝

本文評論者: Joe Medley Kayce Basques Milica MihajlijaAlan Kent、 和 Keith Gu