ผสานรวมเฟรมเวิร์กอื่นๆ กับ Express.js

การกำหนดค่าเพิ่มเติมบางอย่างจะช่วยให้คุณสร้างฟังก์ชันการทำงานของ CLI ที่รับรู้เฟรมเวิร์กพื้นฐานเพื่อขยายการรองรับการผสานรวมไปยังเฟรมเวิร์กอื่นๆ นอกเหนือจาก Angular และ Next.js ได้

ก่อนเริ่มต้น

ก่อนเริ่มใช้งานการติดตั้งใช้งานแอปใน Firebase โปรดอ่านข้อกำหนดและตัวเลือกต่อไปนี้

  • Firebase CLI เวอร์ชัน 12.1.0 ขึ้นไป โปรดติดตั้ง CLI โดยใช้วิธีการที่ต้องการ
  • ไม่บังคับ: เปิดใช้การเรียกเก็บเงินในโปรเจ็กต์ Firebase (ต้องระบุหากวางแผนที่จะใช้ SSR)

เริ่มต้น Firebase

เริ่มต้นใช้งานโดยการเริ่มต้น Firebase สำหรับโปรเจ็กต์เฟรมเวิร์ก ใช้ Firebase CLI สำหรับโปรเจ็กต์ใหม่ หรือแก้ไข firebase.json สำหรับโปรเจ็กต์ที่มีอยู่

เริ่มต้นโปรเจ็กต์ใหม่

  1. ใน Firebase CLI ให้เปิดใช้ตัวอย่างเฟรมเวิร์กเว็บโดยทำดังนี้
    firebase experiments:enable webframeworks
  2. เรียกใช้คำสั่งเริ่มต้นจาก CLI แล้วทำตามข้อความแจ้ง

    firebase init hosting

  3. ตอบว่า "ใช่" สำหรับคำถาม "คุณต้องการใช้เฟรมเวิร์กเว็บไหม" (ทดลอง)"

  4. เลือกไดเรกทอรีแหล่งที่มาของการโฮสต์ ซึ่งอาจเป็นเว็บแอปที่มีอยู่

  5. หากมีข้อความแจ้ง ให้เลือก Express.js / กำหนดเอง

เริ่มต้นโปรเจ็กต์ที่มีอยู่

เปลี่ยนการกำหนดค่าการโฮสต์ใน firebase.json เพื่อให้มีตัวเลือก source แทนตัวเลือก public เช่น

{
  "hosting": {
    "source": "./path-to-your-express-directory"
  }
}

แสดงเนื้อหาแบบคงที่

คุณจะต้องกำหนดค่าแอปพลิเคชันก่อนที่จะติดตั้งใช้งานเนื้อหาแบบคงที่

กำหนดค่า

Firebase CLI ต้องสามารถทั้งสร้างแอปและรู้ว่าเครื่องมือวางชิ้นงานที่กำหนดไว้สำหรับ Hosting อยู่ที่ใด เพื่อให้ทราบวิธีติดตั้งใช้งานแอปพลิเคชัน ซึ่งทำได้ด้วยสคริปต์บิลด์ npm และคำสั่งไดเรกทอรี CJS ใน package.json

เมื่อมี package.json ดังนี้

{
    "name": "express-app",
    "version": "0.0.0",
    "scripts": {
        "build": "spack",
        "static": "cp static/* dist",
        "prerender": "ts-node prerender.ts"
    },
    
}

Firebase CLI จะเรียกใช้สคริปต์บิลด์เท่านั้น ดังนั้นคุณจะต้องตรวจสอบว่า สคริปต์บิลด์ครอบคลุมทุกอย่าง

{
    "name": "express-app",
    "version": "0.0.0",
    "scripts": {
        "build": "spack && npm run static && npm run prerender",
        "static": "cp static/* dist",
        "prerender": "ts-node prerender.ts"
    },
    
}

หากเฟรมเวิร์กไม่รองรับการแสดงผลล่วงหน้าทันที ให้พิจารณาใช้เครื่องมืออย่าง Rendertron Rendertron จะช่วยให้คุณส่งคำขอ Chrome แบบ Headless ไปยังอินสแตนซ์ในเครื่องของแอปได้ เพื่อให้คุณบันทึก HTML ที่ได้เพื่อแสดงใน Hosting

สุดท้ายนี้ เฟรมเวิร์กและเครื่องมือบิลด์ต่างๆ จะจัดเก็บอาร์ติแฟกต์ไว้ในที่ต่างๆ ใช้ directories.serve เพื่อบอก CLI ว่าสคริปต์บิลด์อยู่ที่ใด เอาต์พุตอาร์ติแฟกต์ที่ได้

{
    "name": "express-app",
    "version": "0.0.0",
    "scripts": {
        "build": "spack && npm run static && npm run prerender",
        "static": "cp static/* dist",
        "prerender": "ts-node prerender.ts"
    },
    "directories": {
        "serve": "dist"
    },
    
}

ทำให้ใช้งานได้

หลังจากกำหนดค่าแอปแล้ว คุณจะแสดงเนื้อหาแบบคงที่ได้โดยใช้คำสั่งการทำให้ใช้งานได้มาตรฐาน

firebase deploy

แสดงเนื้อหาแบบไดนามิก

หากต้องการแสดงแอป Express ใน Cloud Functions for Firebase ให้ตรวจสอบว่าได้ส่งออกแอป Express (หรือตัวแฮนเดิล URL รูปแบบ Express) ในลักษณะที่ Firebase ค้นหาได้หลังจากที่แพ็กไลบรารีด้วย npm

หากต้องการดำเนินการนี้ ให้ตรวจสอบว่าคำสั่ง files มีทุกอย่าง ที่จำเป็นสำหรับเซิร์ฟเวอร์ และตั้งค่าจุดแรกเข้าหลักอย่างถูกต้องใน package.json

{
    "name": "express-app",
    "version": "0.0.0",
    "scripts": {
        "build": "spack && npm run static && npm run prerender",
        "static": "cp static/* dist",
        "prerender": "ts-node tools/prerender.ts"
    },
    "directories": {
        "serve": "dist"
    },
    "files": ["dist", "server.js"],
    "main": "server.js",
    ...
}

ส่งออกแอป Express จากฟังก์ชันชื่อ app

// server.js
export function app() {
  const server = express();
   
   return server;
}

หรือหากต้องการส่งออกตัวแฮนเดิล URL รูปแบบด่วน ให้ตั้งชื่อเป็น handle

export function handle(req, res) {
   res.send(hello world);
}

ทำให้ใช้งานได้

firebase deploy

ซึ่งจะทําให้ระบบนําเนื้อหาสแตติกไปใช้งานใน Firebase Hosting และอนุญาตให้ Firebase กลับไปใช้แอป Express ที่โฮสต์ใน Cloud Functions for Firebase

ไม่บังคับ: ผสานรวมกับการตรวจสอบสิทธิ์ Firebase

เครื่องมือการทําให้ใช้งานได้ของ Firebase ที่รับรู้เฟรมเวิร์กของเว็บจะซิงค์สถานะไคลเอ็นต์ และเซิร์ฟเวอร์โดยอัตโนมัติโดยใช้คุกกี้ หากต้องการเข้าถึงบริบทการตรวจสอบสิทธิ์ ออบเจ็กต์ Express res.locals อาจมีอินสแตนซ์ Firebase App ที่ตรวจสอบสิทธิ์แล้ว (firebaseApp) และผู้ใช้ที่ลงชื่อเข้าใช้ในปัจจุบัน (currentUser)