プロジェクトの構造、ライフサイクル、バンドル

ミニアプリ プロジェクトの構造

以前のマークアップ言語、スタイル設定言語、コンポーネントと同様に、ミニアプリ プロジェクトの構造でも、ファイル拡張子やデフォルト名などの詳細は異なります。ただし、全体的なコンセプトはすべてのスーパーアプリ プロバイダで同じです。プロジェクト構造は常に次の要素で構成されます。

  • ミニアプリを初期化するルートファイル 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。ミニアプリのライフサイクルは基本的に 4 つのイベント(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",
});

通常、個々の詳細は異なりますが、コンセプトは WeChatAlipayバイドゥ ByteDance、 さらに クイックアプリ

ページのライフサイクル

アプリのライフサイクルと同様に、ページのライフサイクルにも、デベロッパーがリッスンして対応できるライフサイクル イベントがあります。これらのコアイベントは、loadshowreadyhideunload です。一部 プラットフォームでは、pulldownrefresh などの追加のイベントが提供されます。イベント ハンドラの設定は 各ページに定義されている Page() メソッド。のプロジェクト構造の index ページまたは other ページの場合、これはそれぞれ index.js または other.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 に似ています。デベロッパーは、明示的に選択しない限り、ビルド パラメータに触れることはありません。結果として処理されたファイル 最終的に署名、暗号化され、1 つまたは複数の(サブ)パッケージにパッケージ化されてアップロードされる スーパーアプリ プロバイダのサーバーに送られます。サブパッケージは遅延読み込みを目的としているため、ミニアプリを一度にすべてダウンロードする必要はありません。パッケージの詳細は非公開であり、ドキュメント化されていません。ただし、WeChat の wxapkg 形式など、一部のパッケージ形式はリバース エンジニアリングされています。

謝辞

この記事をレビューしたユーザー: Joe Medley Kayce Basques Milica MihajlijaAlan Kent、 (Keith Gu)氏です。