Projektstruktur, Lebenszyklus und Bündelung

Projektstruktur für Mini-Apps

Wie bei den Markup-, Stil- und Komponentensprachen variieren auch bei der Mini-App-Projektstruktur Details wie die Dateiendungen oder die Standardnamen. Der Grundgedanke ist jedoch für alle Super-App-Anbieter gleich. Die Projektstruktur besteht immer aus:

  • Eine Stammdatei app.js, die die Mini-App initialisiert.
  • Eine Konfigurationsdatei app.json, die in etwa einem Manifest der Webanwendung entspricht.
  • Eine optionale gemeinsame Stylesheet-Datei app.css mit freigegebenen Standardstilen.
  • Eine project.config.json-Datei mit Build-Informationen.

Alle Seiten werden in einzelnen Unterordnern in einem pages-Ordner gespeichert. Jeder Seitenunterordner enthält eine CSS-Datei, eine JS-Datei, eine HTML-Datei und eine optionale JSON-Konfigurationsdatei. Alle Dateien müssen mit Ausnahme der Dateiendungen den Namen des übergeordneten Ordners haben. So benötigt die Mini-App nur einen Verweis auf das Verzeichnis in der app.json-Datei (der manifestähnlichen Datei) und kann alle Unterressourcen dynamisch finden. Aus der Sicht eines Webentwicklers sind Mini-Apps also mehrseitige Apps.

├── 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

Mini-App-Lebenszyklus

Eine Mini-App muss bei der Super App registriert werden. Dazu wird die global definierte Methode App() aufgerufen. Gemäß der oben beschriebenen Projektstruktur geschieht dies in app.js. Der Mini-App-Lebenszyklus besteht im Wesentlichen aus vier Ereignissen: launch, show, hide und error. Handler für diese Ereignisse können der App()-Methode in Form eines Konfigurationsobjekts übergeben werden. Dieses kann auch eine globalData-Property enthalten, die Daten enthält, die global auf allen Seiten verfügbar sein sollen.

/* 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",
});

Wie üblich variieren die einzelnen Details, aber das Konzept ist für WeChat, Alipay, Baidu, ByteDance und Quick App identisch.

Seitenlebenszyklus

Ähnlich wie beim App-Lebenszyklus gibt es auch beim Seitenlebenszyklus Lebenszyklusereignisse, auf die der Entwickler warten und reagieren kann. Diese Hauptereignisse sind load, show, ready, hide und unload. Einige Plattformen bieten zusätzliche Ereignisse wie pulldownrefresh. Die Einrichtung der Event-Handler erfolgt in der Page()-Methode, die für jede Seite definiert ist. Bei den Seiten index oder other aus der Projektstruktur vorher würde dies jeweils in index.js oder other.js geschehen.

/* 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",
  },
});

Der Build-Prozess

Der Build-Prozess von Mini-Apps wird für Entwickler abstrahiert. Im Hintergrund werden Branchentools wie der Babel-Compiler für die Transpilierung und Minimierung und der PostCSS-CSS-Transformer verwendet. Die Build-Umgebung ist mit der von Next.js oder create-react-app vergleichbar, bei der Entwickler die Build-Parameter nur dann ändern, wenn sie dies ausdrücklich tun. Die resultierenden verarbeiteten Dateien werden schließlich signiert, verschlüsselt und in einem oder mehreren (Unter-)Paketen verpackt, die dann auf die Server der Super App-Anbieter hochgeladen werden. Unterpakete sind für das Lazy Loading gedacht, sodass eine Mini-App nicht auf einmal heruntergeladen werden muss. Die Verpackungsdetails sind vertraulich und werden nicht dokumentiert. Einige Paketformate wie das wxapkg-Format von WeChat wurden jedoch rückwärts-entwickelt.

Danksagungen

Dieser Artikel wurde von Joe Medley, Kayce Basques, Milica Mihajlija, Alan Kent und Keith Gu geprüft.