ขณะพัฒนาเว็บแอปโดยใช้ Firebase คุณอาจพบว่า แนวคิด หรือเรื่องที่คุณต้องการข้อมูลเพิ่มเติม เพื่อให้ตัดสินใจได้อย่างถูกต้อง สำหรับโปรเจ็กต์ของคุณ หน้านี้มีจุดประสงค์เพื่อตอบคำถามเหล่านั้นหรือชี้แนะคุณไปยัง ในการเรียนรู้เพิ่มเติม
หากคุณมีคำถามเกี่ยวกับหัวข้อที่ไม่ได้กล่าวถึงในหน้านี้ โปรดไปที่ ชุมชนออนไลน์ เราจะอัปเดตหัวข้อใหม่ๆ ในหน้านี้เป็นระยะๆ ดังนั้น โปรดกลับมาตรวจสอบอีกครั้งเพื่อดูว่าเราได้เพิ่มหัวข้อที่คุณต้องการเรียนรู้แล้วหรือยัง
เวอร์ชัน SDK: เนมสเปซและโมดูลาร์
Firebase มีแพลตฟอร์ม API 2 แบบสำหรับเว็บแอป ดังนี้
- JavaScript - เนมสเปซ นี่คืออินเทอร์เฟซ JavaScript ที่ Firebase ได้รับการดูแลมาเป็นเวลาหลายปี และเป็นที่คุ้นเคยสำหรับนักพัฒนาเว็บที่มีอายุ แอป Firebase เนื่องจาก Namespaced API ไม่ได้รับประโยชน์จากการทำงานอย่างต่อเนื่อง การรองรับฟีเจอร์ใหม่ แอปใหม่ๆ ส่วนใหญ่ควรใช้ API แบบแยกส่วนแทน
- JavaScript - โมดูล SDK นี้อิงตามแนวทางแบบแยกส่วน ลดขนาด SDK ลงและมีประสิทธิภาพมากขึ้นด้วย JavaScript ที่ทันสมัย เครื่องมือสร้างอย่าง webpack หรือ ภาพรวม
API แบบแยกส่วนสามารถทำงานร่วมกับเครื่องมือสร้างที่ตัดโค้ดที่ไม่ได้ใช้งานอยู่ได้เป็นอย่างดี ที่ใช้ในแอปของคุณ ซึ่งเป็นกระบวนการที่เรียกว่า "การเขย่าต้นไม้" แอปที่สร้างด้วย SDK นี้ จากขนาดพื้นที่ที่ลดลงอย่างมาก Namespaced API แม้ว่าจะมีให้บริการเป็น ไม่มีโครงสร้างแบบแยกส่วนอย่างเคร่งครัดและไม่ได้ให้ ในการลดขนาดลงเท่าๆ กัน
แม้ว่า API ส่วนใหญ่ของ Modular จะมีรูปแบบเดียวกันกับ Namespaced API
การจัดระเบียบรหัสจะแตกต่างกัน โดยทั่วไป API ของเนมสเปซคือ
โดยมุ่งเน้นที่เนมสเปซและรูปแบบบริการ ในขณะที่ API โมดูลาร์
ไปสู่ฟังก์ชันที่แยกกัน ตัวอย่างเช่น เชนดอทเชนของ API ที่ใช้เนมสเปซ เช่น
firebaseApp.auth()
จะแทนที่ใน API แบบแยกด้วยฟังก์ชัน getAuth()
เพียงอย่างเดียว
ที่ใช้เวลา firebaseApp
และแสดงผลอินสแตนซ์ Authentication
ซึ่งหมายความว่าเว็บแอปที่สร้างด้วย Namespaced API จะต้องใช้ การเปลี่ยนโครงสร้างภายในโค้ดเพื่อใช้ประโยชน์จากการออกแบบแอปแบบแยกส่วน โปรดดู คู่มือการอัปเกรด หากต้องการทราบรายละเอียดเพิ่มเติม
JavaScript - API แบบแยกส่วนสำหรับแอปใหม่
หากคุณเพิ่งเริ่มใช้การผสานรวมใหม่กับ Firebase คุณสามารถเลือกใช้ Modular API เมื่อคุณ เพิ่มและเริ่มต้น SDK
ขณะที่คุณพัฒนาแอป โปรดทราบว่าโค้ดของคุณจะมีการจัดระเบียบ โดยพื้นฐานแล้วจะอยู่ที่ฟังก์ชัน ใน API แบบแยกส่วน บริการจะส่งผ่านเป็น จากนั้นฟังก์ชันจะใช้รายละเอียดของบริการเพื่อดำเนินการส่วนที่เหลือ เช่น
import { getAuth, onAuthStateChanged } from "firebase/auth";
const auth = getAuth(firebaseApp);
onAuthStateChanged(auth, user => {
// Check for user status
});
ดูตัวอย่างและรายละเอียดเพิ่มเติมได้จากคู่มือสำหรับผลิตภัณฑ์แต่ละประเภท เป็นเอกสารอ้างอิง API แบบแยกส่วน
วิธีเพิ่ม SDK ของเว็บลงในแอป
Firebase มีไลบรารี JavaScript สำหรับผลิตภัณฑ์ Firebase ส่วนใหญ่ รวมถึง Remote Config, FCM และอื่นๆ วิธีเพิ่ม Firebase SDK ลงใน เว็บแอปขึ้นอยู่กับว่าคุณใช้เครื่องมือใดกับแอป (เช่น โมดูล Bundler)
คุณสามารถเพิ่ม ไลบรารีที่ใช้ได้ในแอปของคุณผ่านทาง วิธีการที่รองรับมีดังนี้
- npm (สำหรับ Bundler โมดูล)
- CDN (เครือข่ายนำส่งข้อมูล)
ดูวิธีการตั้งค่าโดยละเอียดได้ที่ เพิ่ม Firebase ไปยังแอป JavaScript เนื้อหาที่เหลือของส่วนนี้ มีข้อมูลที่จะช่วยให้คุณเลือกจากตัวเลือกที่มีอยู่
npm
การดาวน์โหลดแพ็กเกจ Firebase npm (ซึ่งมีทั้งเบราว์เซอร์และ Node.js ) จะส่งสำเนา Firebase SDK ในเครื่อง ซึ่งอาจจำเป็นต้องใช้ สำหรับแอปพลิเคชันที่ไม่ใช่เบราว์เซอร์ เช่น แอป Node.js, React Native หรือ Electron การดาวน์โหลดมีแพ็กเกจ Node.js และ React Native เป็นตัวเลือกสำหรับบางรายการ แพ็กเกจของคุณ แพ็กเกจ Node.js จำเป็นสำหรับการแสดงผลฝั่งเซิร์ฟเวอร์ (SSR) ของเฟรมเวิร์ก SSR
การใช้ npm กับชุดโมดูล เช่น webpack หรือ ภาพรวมช่วยให้มีการเพิ่มประสิทธิภาพ ตัวเลือก "Tree-เชค" โค้ดที่ไม่ได้ใช้ และใช้ Polyfill ที่กำหนดเป้าหมาย ซึ่งสามารถ ช่วยลดร่องรอยของแอปได้อย่างมาก การใช้ฟีเจอร์เหล่านี้อาจ เพิ่มความซับซ้อนในการกำหนดค่าและสร้างห่วงโซ่ เครื่องมือ CLI ในกระแสหลักจะช่วยลดข้อมูลดังกล่าวได้ เครื่องมือเหล่านี้รวมถึง มุมแหลม รีแอ็ก สถานที่ ถัดไป และอื่นๆ
บทสรุปมีดังนี้:
- มอบการเพิ่มประสิทธิภาพขนาดแอปที่มีประโยชน์
- มีเครื่องมือที่มีประสิทธิภาพสำหรับจัดการโมดูล
- ต้องระบุสำหรับ SSR ที่มี Node.js
CDN (เครือข่ายนำส่งข้อมูล)
การเพิ่มไลบรารีที่จัดเก็บไว้ใน CDN ของ Firebase เป็นวิธีการตั้งค่า SDK แบบง่ายที่นักพัฒนาซอฟต์แวร์หลายคนอาจคุ้นเคย การใช้ CDN เพื่อเพิ่ม SDK คุณไม่จำเป็นต้องใช้เครื่องมือสร้าง และห่วงโซ่ของบิลด์อาจมีแนวโน้ม ทำงานง่ายขึ้นเมื่อเทียบกับ Bundler โมดูล หากคุณไม่ค่อยกังวลเกี่ยวกับ ขนาดที่ติดตั้งของแอปและไม่มีข้อกำหนดพิเศษ การแปลงจาก TypeScript ก็คือ CDN ก็เป็นตัวเลือกที่ดี
บทสรุปมีดังนี้:
- คุ้นเคยและเรียบง่าย
- เหมาะสมเมื่อขนาดแอปไม่ใช่ข้อกังวลหลัก
- เหมาะสมในกรณีที่เว็บไซต์ไม่ได้ใช้เครื่องมือสร้าง
ตัวแปร Firebase Web SDK
Web SDK ของ Firebase ใช้ได้ในทั้งเบราว์เซอร์และแอปพลิเคชันโหนด อย่างไรก็ตาม มีผลิตภัณฑ์หลายรายการที่ไม่มีให้บริการในสภาพแวดล้อมของโหนด ดูรายการสภาพแวดล้อมที่รองรับ
SDK ผลิตภัณฑ์บางรายการมีตัวแปรของเบราว์เซอร์และโหนดแยกกัน มีให้ใช้งานทั้งในรูปแบบ ESM และ CJS และ SDK ผลิตภัณฑ์บางรายการอาจให้ ตัวแปร Cordova หรือ React Native SDK ของเว็บได้รับการกำหนดค่าเพื่อให้ ตัวแปรที่ถูกต้องตามการกำหนดค่าเครื่องมือหรือสภาพแวดล้อม และไม่ควร ส่วนใหญ่คุณจะต้องเลือกด้วยตนเอง ตัวแปร SDK ทั้งหมดออกแบบ เพื่อช่วยสร้างเว็บแอปหรือแอปไคลเอ็นต์ เพื่อการเข้าถึงของผู้ใช้ปลายทาง เช่น ในแอปพลิเคชัน Node.js บนเดสก์ท็อปหรือ IoT หาก คือการตั้งค่าสิทธิ์การเข้าถึงระดับผู้ดูแลระบบจากสภาพแวดล้อมที่ได้รับสิทธิ์ (เช่น ) ใช้เมธอด Firebase Admin SDK แทน
การตรวจจับสภาพแวดล้อมด้วย Bundler และเฟรมเวิร์ก
เมื่อติดตั้ง Firebase Web SDK โดยใช้ npm JavaScript และ Node.js ติดตั้งไว้ทั้ง 2 เวอร์ชัน แพ็กเกจนี้มีการตรวจจับสภาพแวดล้อมโดยละเอียด เพื่อเปิดใช้แพ็กเกจที่เหมาะกับแอปพลิเคชันของคุณ
หากโค้ดของคุณใช้คำสั่ง require
ของ Node.js SDK จะค้นหาโหนดเฉพาะโหนด
มิเช่นนั้น คุณต้องกำหนดค่าการตั้งค่า Bundler ให้ถูกต้องเพื่อตรวจจับ
ช่องจุดแรกเข้าที่ถูกต้องในไฟล์ package.json
(เช่น main
browser
หรือ module
) หากคุณพบข้อผิดพลาดเกี่ยวกับรันไทม์กับ SDK ให้ตรวจสอบดังนี้
ตรวจสอบว่าได้กำหนดค่า Bundler ให้จัดลำดับความสำคัญของประเภท Bundle ที่ถูกต้อง
สำหรับสภาพแวดล้อมของคุณ
ดูข้อมูลเกี่ยวกับออบเจ็กต์การกำหนดค่า Firebase
หากต้องการเริ่มต้น Firebase ในแอป คุณต้องระบุ Firebase ของแอป การกำหนดค่าโปรเจ็กต์ คุณสามารถรับการกำหนดค่า Firebase ออบเจ็กต์ได้ทุกเมื่อ
เราไม่แนะนำให้แก้ไขออบเจ็กต์การกำหนดค่าด้วยตนเอง โดยเฉพาะอย่างยิ่ง "ตัวเลือก Firebase" ที่จำเป็นต่อไปนี้
apiKey
,projectId
และappID
ถ้า คุณเริ่มต้นแอปด้วยค่าที่ไม่ถูกต้องหรือขาดหายไปสำหรับ "ตัวเลือก Firebase" ผู้ใช้แอปอาจพบปัญหาร้ายแรง ยกเว้นauthDomain
ซึ่งอัปเดตได้ดังนี้ แนวทางปฏิบัติแนะนำสำหรับการใช้ signInWithRedirectหากคุณเปิดใช้ Google Analytics ในโปรเจ็กต์ Firebase การกําหนดค่าของคุณ มีฟิลด์
measurementId
ดูข้อมูลเพิ่มเติมเกี่ยวกับฟิลด์นี้ใน หน้าเริ่มต้นใช้งาน Analyticsหากคุณเปิดใช้ Google Analytics หรือ Realtime Database หลังจากที่คุณสร้าง เว็บแอป Firebase ตรวจสอบว่าออบเจ็กต์การกำหนดค่า Firebase ที่คุณใช้ใน แอปของคุณได้รับการอัปเดตด้วยการกําหนดค่าที่เชื่อมโยง (
measurementId
และdatabaseURL
ตามลำดับ) คุณสามารถรับการกำหนดค่า Firebase object ที่ ตลอดเวลา
นี่คือรูปแบบของออบเจ็กต์การกำหนดค่าที่เปิดใช้บริการทั้งหมด (ค่าเหล่านี้ ระบบจะป้อนข้อมูลให้โดยอัตโนมัติ) ดังนี้
var firebaseConfig = { apiKey: "API_KEY", authDomain: "PROJECT_ID.firebaseapp.com", // The value of `databaseURL` depends on the location of the database databaseURL: "https://DATABASE_NAME.firebaseio.com", projectId: "PROJECT_ID", storageBucket: "PROJECT_ID.appspot.com", messagingSenderId: "SENDER_ID", appId: "APP_ID", // For Firebase JavaScript SDK v7.20.0 and later, `measurementId` is an optional field measurementId: "G-MEASUREMENT_ID", };
ไลบรารีที่ใช้ได้
ตัวเลือกการตั้งค่าเพิ่มเติม
ชะลอการโหลด Firebase SDK (จาก CDN)
คุณเลื่อนการรวม Firebase SDK ออกไปได้จนกว่าทั้งหน้าจะมี
โหลดแล้ว หากคุณใช้สคริปต์ CDN ของ API แบบโมดูลกับ <script type="module">
นี่คือลักษณะการทำงานเริ่มต้น หากคุณใช้สคริปต์ CDN ที่ใช้เนมสเปซเป็น
ทำตามขั้นตอนเหล่านี้เพื่อเลื่อนการโหลด
เพิ่ม Flag
defer
ลงในแท็กscript
แต่ละแท็กสำหรับ Firebase SDK จากนั้นเลื่อนเวลา การเริ่มต้น Firebase โดยใช้สคริปต์ที่ 2 เช่น<script defer src="https://www.gstatic.com/firebasejs/8.10.1/firebase-app.js"></script> <script defer src="https://www.gstatic.com/firebasejs/8.10.1/firebase-auth.js"></script> <script defer src="https://www.gstatic.com/firebasejs/8.10.1/firebase-firestore.js"></script> // ... <script defer src="./init-firebase.js"></script>
สร้างไฟล์
init-firebase.js
แล้วรวมสิ่งต่อไปนี้ในไฟล์// TODO: Replace the following with your app's Firebase project configuration var firebaseConfig = { // ... }; // Initialize Firebase firebase.initializeApp(firebaseConfig);
ใช้โปรเจ็กต์ Firebase หลายโปรเจ็กต์ในแอปเดียว
ในกรณีส่วนใหญ่ คุณจะต้องเริ่มต้น Firebase ในแอปเริ่มต้นแอปเดียวเท่านั้น คุณเข้าถึง Firebase จากแอปนั้นได้ 2 วิธีที่เทียบเท่ากัน ได้แก่
Web
import { initializeApp } from "firebase/app"; import { getStorage } from "firebase/storage"; import { getFirestore } from "firebase/firestore"; // Initialize Firebase with a "default" Firebase project const defaultProject = initializeApp(firebaseConfig); console.log(defaultProject.name); // "[DEFAULT]" // Option 1: Access Firebase services via the defaultProject variable let defaultStorage = getStorage(defaultProject); let defaultFirestore = getFirestore(defaultProject); // Option 2: Access Firebase services using shorthand notation defaultStorage = getStorage(); defaultFirestore = getFirestore();
Web
// Initialize Firebase with a "default" Firebase project const defaultProject = firebase.initializeApp(firebaseConfig); console.log(defaultProject.name); // "[DEFAULT]" // Option 1: Access Firebase services via the defaultProject variable let defaultStorage = defaultProject.storage(); let defaultFirestore = defaultProject.firestore(); // Option 2: Access Firebase services using shorthand notation defaultStorage = firebase.storage(); defaultFirestore = firebase.firestore();
อย่างไรก็ตาม บางครั้งคุณอาจต้องเข้าถึงโปรเจ็กต์ Firebase หลายโปรเจ็กต์พร้อมกัน เช่น คุณอาจต้องการอ่านข้อมูลจากฐานข้อมูลของ Firebase รายการหนึ่ง แต่จัดเก็บไฟล์ในโปรเจ็กต์ Firebase อื่น หรือคุณอาจต้องการ ตรวจสอบสิทธิ์ 1 โปรเจ็กต์ในขณะที่เก็บโปรเจ็กต์ที่ 2 ไว้ได้โดยไม่ต้องตรวจสอบสิทธิ์
SDK JavaScript Firebase ช่วยให้คุณเริ่มต้นและใช้โปรเจ็กต์ Firebase หลายโปรเจ็กต์ได้ ในแอปเดียวในเวลาเดียวกัน โดยแต่ละโปรเจ็กต์ใช้ Firebase ของตนเอง ข้อมูลการกำหนดค่า
Web
import { initializeApp, getApp } from "firebase/app"; import { getStorage } from "firebase/storage"; import { getFirestore } from "firebase/firestore"; // Initialize Firebase with a default Firebase project initializeApp(firebaseConfig); // Initialize Firebase with a second Firebase project const otherProject = initializeApp(otherProjectFirebaseConfig, "other"); console.log(getApp().name); // "[DEFAULT]" console.log(otherProject.name); // "otherProject" // Use the shorthand notation to access the default project's Firebase services const defaultStorage = getStorage(); const defaultFirestore = getFirestore(); // Use the otherProject variable to access the second project's Firebase services const otherStorage = getStorage(otherProject); const otherFirestore = getFirestore(otherProject);
Web
// Initialize Firebase with a default Firebase project firebase.initializeApp(firebaseConfig); // Initialize Firebase with a second Firebase project const otherProject = firebase.initializeApp(otherProjectFirebaseConfig, "other"); console.log(firebase.app().name); // "[DEFAULT]" console.log(otherProject.name); // "otherProject" // Use the shorthand notation to access the default project's Firebase services const defaultStorage = firebase.storage(); const defaultFirestore = firebase.firestore(); // Use the otherProject variable to access the second project's Firebase services const otherStorage = otherProject.storage(); const otherFirestore = otherProject.firestore();
เรียกใช้เว็บเซิร์ฟเวอร์ภายในสำหรับการพัฒนา
หากคุณกำลังสร้างเว็บแอป บางส่วนของ Firebase JavaScript SDK กำหนดให้ดำเนินการดังกล่าว คุณให้บริการเว็บแอปพลิเคชันของคุณจากเซิร์ฟเวอร์แทนที่จะเป็นระบบไฟล์ในเครื่อง คุณ สามารถใช้ Firebase CLI เพื่อเรียกใช้เซิร์ฟเวอร์ภายใน
หากตั้งค่า Firebase Hosting สำหรับแอปแล้ว แสดงว่าคุณ ดำเนินการตามขั้นตอนหลายขั้นตอนด้านล่างนี้
ในการแสดงผลเว็บแอป คุณจะต้องใช้ Firebase CLI ซึ่งเป็นเครื่องมือบรรทัดคำสั่ง
ไปที่เอกสารประกอบเกี่ยวกับ CLI ของ Firebase เพื่อดูวิธี ติดตั้ง CLI หรือ อัปเดตเป็นเวอร์ชันล่าสุด
เริ่มต้นโปรเจ็กต์ Firebase เรียกใช้คำสั่งต่อไปนี้จากรูทของไดเรกทอรีแอปในเครื่อง
firebase init
เริ่มต้นเซิร์ฟเวอร์ภายในเพื่อการพัฒนา เรียกใช้ คำสั่งต่อไปนี้จากรูทของไดเรกทอรีแอปในเครื่อง
firebase serve
ทรัพยากรโอเพนซอร์สสำหรับ Firebase JavaScript SDK
Firebase สนับสนุนการพัฒนาโอเพนซอร์สและเราสนับสนุนให้ชุมชน การมีส่วนร่วมและความคิดเห็น
Firebase JavaScript SDK
Firebase JavaScript SDK ส่วนใหญ่ได้รับการพัฒนาเป็นไลบรารีโอเพนซอร์สที่เป็นสาธารณะ ที่เก็บ Firebase GitHub
ตัวอย่างการเริ่มต้นอย่างรวดเร็ว
Firebase เก็บรักษาคอลเล็กชันตัวอย่างการเริ่มต้นอย่างรวดเร็วสำหรับ Firebase API ส่วนใหญ่ใน เว็บ ค้นหาการเริ่มต้นอย่างรวดเร็วเหล่านี้ในที่สาธารณะ ที่เก็บสำหรับการเริ่มต้นอย่างรวดเร็วของ Firebase GitHub คุณใช้การเริ่มต้นอย่างรวดเร็วเหล่านี้เป็นโค้ดตัวอย่างในการใช้ Firebase SDK ได้