प्रोजेक्ट स्ट्रक्चर, लाइफ़साइकल, और बंडलिंग

मिनी ऐप्लिकेशन प्रोजेक्ट स्ट्रक्चर

मार्कअप भाषाओं, स्टाइल भाषाओं, और कॉम्पोनेंट की तरह ही, मिनी ऐप्लिकेशन प्रोजेक्ट के स्ट्रक्चर में भी फ़ाइल एक्सटेंशन या डिफ़ॉल्ट नाम जैसी जानकारी अलग-अलग होती है. हालांकि, सुपर ऐप्लिकेशन उपलब्ध कराने वाली सभी कंपनियों के लिए, इसका मुख्य मकसद एक ही है. प्रोजेक्ट के स्ट्रक्चर में ये चीज़ें हमेशा शामिल होती हैं:

  • रूट फ़ाइल 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 में होता है. मिनी ऐप्लिकेशन के लाइफ़साइकल में मुख्य रूप से चार इवेंट होते हैं: launch, show, hide, और error. इन इवेंट के हैंडलर, कॉन्फ़िगरेशन ऑब्जेक्ट के तौर पर 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, Baidu, ByteDance, और Quick App के लिए कॉन्सेप्ट एक जैसा है.

पेज का लाइफ़साइकल

ऐप्लिकेशन के लाइफ़साइकल की तरह ही, पेज के लाइफ़साइकल में भी लाइफ़साइकल इवेंट होते हैं. डेवलपर इन इवेंट को सुन सकता है और इन पर कार्रवाई कर सकता है. ये मुख्य इवेंट load, show, ready, hide, और unload हैं. कुछ प्लैटफ़ॉर्म, 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 सीएसएस ट्रांसफ़ॉर्मर. बिल्ड करने का अनुभव, Next.js या create-react-app जैसा ही है. यहां डेवलपर, बिल्ड पैरामीटर में कभी बदलाव नहीं करते, बशर्ते वे साफ़ तौर पर ऐसा न करना चाहें. प्रोसेस की गई फ़ाइलों पर आखिर में हस्ताक्षर किए जाते हैं, उन्हें एन्क्रिप्ट किया जाता है, और एक या एक से ज़्यादा (सब-)पैकेज में पैकेज किया जाता है. इसके बाद, उन्हें सुपर ऐप्लिकेशन की सेवा देने वाली कंपनियों के सर्वर पर अपलोड किया जाता है. सब-पैकेज, लेज़ी लोडिंग के लिए होते हैं. इसलिए, किसी मिनी ऐप्लिकेशन को एक साथ डाउनलोड करने की ज़रूरत नहीं होती. पैकेजिंग की जानकारी निजी होनी चाहिए और इस पर कोई रिकॉर्ड नहीं किया गया है. हालांकि, WeChat के wxapkg फ़ॉर्मैट जैसे पैकेज फ़ॉर्मैट को रिवर्स-इंजीनियर में बदला गया है.

धन्यवाद

इस लेख की समीक्षा, जो मेडली, किस बेस्केस, मिलिका मिहाइलिया, ऐलन केंट, और कीथ गु ने की.