โครงสร้าง อายุการใช้งาน และการรวมแพ็กเกจของโปรเจ็กต์

โครงสร้างโปรเจ็กต์แอปขนาดเล็ก

เช่นเดียวกับภาษามาร์กอัป ภาษาในการจัดรูปแบบ และคอมโพเนนต์ต่างๆ เช่นเดียวกับก่อนหน้านี้ โครงสร้างโปรเจ็กต์แอปขนาดเล็กทำให้รายละเอียดต่างๆ เช่น นามสกุลไฟล์หรือชื่อเริ่มต้นจะแตกต่างกันไป แนวคิดโดยรวมจะเหมือนกันสำหรับผู้ให้บริการ Super App ทุกราย โครงสร้างของโครงการจะประกอบด้วย:

  • ไฟล์ราก app.js ที่เริ่มต้นแอปขนาดเล็ก
  • ไฟล์การกำหนดค่า app.json ที่สอดคล้องกับไฟล์ Manifest ของเว็บแอปโดยประมาณ
  • ไฟล์สไตล์ชีตทั่วไป app.css ที่มีรูปแบบเริ่มต้นที่แชร์
  • ไฟล์ project.config.json ที่มีข้อมูลบิลด์

ทุกหน้าจัดเก็บอยู่ในโฟลเดอร์ย่อยแต่ละโฟลเดอร์ในโฟลเดอร์ pages โฟลเดอร์ย่อยของหน้าแต่ละโฟลเดอร์จะมีไฟล์ CSS, ไฟล์ JS, ไฟล์ HTML และไฟล์ JSON สำหรับการกำหนดค่าซึ่งมีหรือไม่ก็ได้ ไฟล์ทั้งหมดจะต้องตั้งชื่อเหมือนกับโฟลเดอร์ที่มีไฟล์ นอกเหนือจากนามสกุลไฟล์ เช่นเดียวกับแอปขนาดเล็ก แอปขนาดเล็กก็เพียงต้องการตัวชี้ไปยังไดเรกทอรีในไฟล์ app.json (ไฟล์ที่มีลักษณะเหมือนไฟล์ Manifest) และสามารถค้นหาทรัพยากรย่อยทั้งหมดได้ในแบบไดนามิก ในมุมมองของนักพัฒนาเว็บ แอปขนาดเล็กคือแอปที่มีหลายหน้า

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

วงจรของแอปมินิ

แอปมินิต้องลงทะเบียนกับ Super App โดยเรียกใช้เมธอด App() ที่กำหนดไว้ทั่วโลก โปรดดูโครงสร้างโปรเจ็กต์ที่ระบุไว้ก่อนซึ่งจะเกิดขึ้นใน app.js วงจรของแอปมินิประกอบด้วย 4 เหตุการณ์ ได้แก่ 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 เพื่อเปลี่ยนรูปแบบและลดขนาด และตัวแปลง CSS postcss ประสบการณ์การใช้งานบิลด์เทียบเท่ากับ Next.js หรือ create-react-app ที่นักพัฒนาแอปเลือกที่จะไม่ใช้อย่างชัดแจ้ง จะไม่แตะพารามิเตอร์ของบิลด์เลย ท้ายที่สุดไฟล์ที่ประมวลผลได้จะมีการรับรอง เข้ารหัส และรวมแพ็กเกจไว้ในแพ็กเกจ (Sub) 1 แพ็กเกจหรือหลายแพ็กเกจ ซึ่งจะอัปโหลดไปที่เซิร์ฟเวอร์ของผู้ให้บริการ Super App แพ็กเกจย่อยมีไว้เพื่อการโหลดแบบ Lazy Loading ดังนั้นแอปมินิจึงไม่ต้องดาวน์โหลดพร้อมกันทั้งหมด รายละเอียดแพ็กเกจควรเป็นแบบส่วนตัวและไม่มีการบันทึก แต่รูปแบบแพ็กเกจบางรูปแบบ เช่น รูปแบบ wxapkg ของ WeChat ได้รับวิศวกรรมย้อนกลับ

กิตติกรรมประกาศ

บทความนี้ได้รับการตรวจสอบโดย Joe Medley, Kayce Basques, Milica Mihajlija, Alan Kent และ Keith Gu