ด้วยการกำหนดค่าเพิ่มเติมบางอย่าง คุณสามารถสร้างบนฟังก์ชัน CLI ที่รับรู้เฟรมเวิร์กพื้นฐานเพื่อขยายการสนับสนุนการรวมไปยังเฟรมเวิร์กอื่นที่ไม่ใช่ Angular และ Next.js
ก่อนที่คุณจะเริ่มต้น
ก่อนที่คุณจะเริ่มทำให้แอปของคุณใช้งานได้กับ Firebase ให้อ่านข้อกำหนดและตัวเลือกต่อไปนี้:
- Firebase CLI เวอร์ชัน 12.1.0 หรือใหม่กว่า ตรวจสอบให้แน่ใจว่า ได้ติดตั้ง CLI โดยใช้วิธีที่คุณต้องการ
ไม่บังคับ: เปิดใช้งานการเรียกเก็บเงินในโครงการ Firebase ของคุณ (จำเป็นหากคุณวางแผนที่จะใช้ SSR)
ไม่บังคับ: เปิดใช้งานการเรียกเก็บเงินในโครงการ Firebase ของคุณ (จำเป็นหากคุณวางแผนที่จะใช้ SSR)
เริ่มต้น Firebase
ในการเริ่มต้น ให้เริ่มต้น Firebase สำหรับโครงการเฟรมเวิร์กของคุณ ใช้ Firebase CLI สำหรับโครงการใหม่ หรือแก้ไข firebase.json
สำหรับโครงการที่มีอยู่
เริ่มต้นโครงการใหม่
- ใน Firebase CLI ให้เปิดใช้งานการแสดงตัวอย่างเฟรมเวิร์กของเว็บ:
firebase experiments:enable webframeworks
เรียกใช้คำสั่งเริ่มต้นจาก CLI จากนั้นทำตามพร้อมท์:
firebase init hosting
ตอบว่าใช่กับ "คุณต้องการใช้เฟรมเวิร์กเว็บหรือไม่ (ทดลอง)"
เลือกไดเร็กทอรีต้นทางโฮสติ้งของคุณ นี่อาจเป็นเว็บแอปที่มีอยู่แล้ว
หากได้รับแจ้ง ให้เลือก Express.js / กำหนดเอง
เริ่มต้นโครงการที่มีอยู่
เปลี่ยนการกำหนดค่าโฮสติ้งของคุณใน firebase.json
ให้มีตัวเลือก source
ที่มา แทนที่จะเป็นตัวเลือก public
ตัวอย่างเช่น:
{
"hosting": {
"source": "./path-to-your-express-directory"
}
}
ให้บริการเนื้อหาคงที่
ก่อนปรับใช้เนื้อหาแบบสแตติก คุณจะต้องกำหนดค่าแอปพลิเคชันของคุณ
กำหนดค่า
เพื่อให้ทราบวิธีปรับใช้แอปพลิเคชันของคุณ Firebase CLI จะต้องสามารถสร้างแอปของคุณและรู้ว่าเครื่องมือของคุณวางเนื้อหาสำหรับการโฮสต์ไว้ที่ใด สิ่งนี้สำเร็จได้ด้วยสคริปต์สร้าง 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 แบบไม่มีส่วนหัวกับอินสแตนซ์ในเครื่องของแอปของคุณ ดังนั้นคุณจึงสามารถบันทึก HTML ที่เป็นผลลัพธ์เพื่อให้บริการบนโฮสติ้งได้
ในที่สุด เฟรมเวิร์กและเครื่องมือสร้างที่แตกต่างกันจะจัดเก็บสิ่งประดิษฐ์ไว้ในที่ต่างๆ ใช้ 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 สำหรับ Firebase ตรวจสอบให้แน่ใจว่าแอป Express ของคุณ (หรือตัวจัดการ URL แบบด่วน) ถูกส่งออกในลักษณะที่ 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",
...
}
ส่งออกแอปด่วนของคุณจากฟังก์ชันชื่อ 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 และช่วยให้ Firebase ถอยกลับไปยังแอป Express ของคุณที่โฮสต์บน Cloud Functions สำหรับ Firebase
ทางเลือก: รวมเข้ากับการรับรองความถูกต้องของ Firebase
เครื่องมือการปรับใช้ Firebase ที่รับรู้เว็บเฟรมเวิร์กจะทำให้สถานะไคลเอ็นต์และเซิร์ฟเวอร์ซิงค์กันโดยอัตโนมัติโดยใช้คุกกี้ ในการเข้าถึงบริบทการพิสูจน์ตัวตน อ็อบเจ็กต์ Express res.locals
จะมีอินสแตนซ์ Firebase App ที่ผ่านการพิสูจน์ตัวตนแล้ว ( firebaseApp
) และ User ที่ลงชื่อเข้าใช้อยู่ในปัจจุบัน ( currentUser
)