Projektstruktur, Lebenszyklus und Bündelung

Projektstruktur von Mini-Apps

Wie bei den Markup- und Stylesheet-Sprachen und den Komponenten variieren auch bei der Projektstruktur von Mini-Apps die Details wie die Dateiendungen oder die Standardnamen. Die allgemeine Idee ist jedoch für alle Super-App-Anbieter dieselbe. Die Projektstruktur besteht immer aus:

  • Eine Stammdatei app.js, mit der die Mini-App initialisiert wird.
  • Eine Konfigurationsdatei app.json, die ungefähr einem Web-App-Manifest entspricht.
  • Eine optionale gemeinsame Stylesheet-Datei app.css mit gemeinsamen Standardformatierungen.
  • Eine project.config.json-Datei, die Build-Informationen enthält.

Alle Seiten werden in einzelnen Unterordnern im Ordner pages gespeichert. Jeder Seitenunterordner enthält eine CSS-Datei, eine JS-Datei, eine HTML-Datei und eine optionale JSON-Konfigurationsdatei. Alle Dateien müssen wie der Ordner benannt sein, in dem sie enthalten sind, mit Ausnahme der Dateiendungen. So benötigt die Mini-App nur einen Zeiger auf das Verzeichnis in der Datei app.json (der manifestähnlichen Datei) und kann alle untergeordneten Ressourcen dynamisch finden. Aus Sicht eines Webentwicklers sind Mini-Apps also Apps mit mehreren Seiten.

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

Lebenszyklus von Mini-Apps

Eine Mini-App muss bei der Super-App registriert werden, indem die global definierte Methode App() aufgerufen wird. In Bezug auf die zuvor beschriebene Projektstruktur geschieht dies in app.js. Der Lebenszyklus einer Mini-App besteht im Wesentlichen aus vier Ereignissen: launch, show, hide und error. Handler für diese Ereignisse können in Form eines Konfigurationsobjekts an die App()-Methode übergeben werden. Dieses Objekt kann auch eine globalData-Property enthalten, die Daten enthält, die auf allen Seiten global 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 gewohnt variieren die einzelnen Details, aber das Konzept ist für WeChat, Alipay, Baidu, ByteDance und Quick App gleich.

Seitenlebenszyklus

Ähnlich wie beim App-Lebenszyklus gibt es auch beim Seitenlebenszyklus Ereignisse, auf die der Entwickler reagieren kann. Diese wichtigen Ereignisse sind load, show, ready, hide und unload. Einige Plattformen bieten zusätzliche Ereignisse wie pulldownrefresh. Die Event-Handler werden in der Page()-Methode eingerichtet, die für jede Seite definiert ist. Für die Seiten index oder other aus der Projektstruktur vorher würde dies in index.js bzw. 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 vom Entwickler abstrahiert. Intern werden Branchen-Tools wie der Babel-Compiler für die Transpilierung und Komprimierung sowie der postcss-CSS-Transformer verwendet. Der Build-Prozess ist vergleichbar mit dem von Next.js oder create-react-app. Entwickler müssen die Build-Parameter nur dann anpassen, wenn sie dies explizit möchten. 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 vorgesehen, sodass eine Mini-App nicht auf einmal heruntergeladen werden muss. Die Verpackungsdetails sind privat und werden nicht dokumentiert. Einige Paketformate wie das wxapkg-Format von WeChat wurden jedoch zurückentwickelt.

Danksagungen

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