升級至模組化 Web SDK (第 9 版)
如果應用程式目前使用 Web SDK 8 以下版本,建議您按照本指南中的操作說明,將應用程式遷移至 9 版。
本指南假設您熟悉第 8 版,且會利用 webpack 或 Rollup 等模組整合工具,進行升級和持續的第 9 版開發作業。
強烈建議您在開發環境中使用模組套件組合器。如果您沒有使用,就無法充分利用版本 9 在縮減應用程式大小方面的主要優點。您需要使用 npm 或 yarn 安裝 SDK。
關於相容性程式庫
Web SDK 9 版提供兩種程式庫:
- 模組化:新的 API 介面,旨在協助樹狀圖搖動 (移除未使用的程式碼),讓您的網路應用程式盡可能小且快速。
- 相容性:這是與第 8 版完全相容的熟悉 API 介面,可讓您升級至第 9 版,而無須一次變更所有 SDK 程式碼。相較於 8 版,相容性程式庫的大小或效能優勢幾乎不存在。
本指南假設您會善用第 9 版的 Compat 程式庫,以利升級。這些程式庫可讓您繼續使用第 8 版程式碼,以及為第 9 版重構的程式碼。這表示您在升級過程中,可以更輕鬆地編譯及偵錯應用程式。
如果應用程式與 Web SDK 的接觸程度很低,不使用第 9 版相容性程式庫,可能更適合重構第 8 版程式碼。如果您要升級這類應用程式,可以按照本指南的「第 9 版模組化」部分操作說明,不必使用相容性程式庫。
關於升級程序
升級程序的每個步驟都會設有範圍,讓您可以完成應用程式來源的編輯作業,然後編譯並執行應用程式,而不會造成損壞。總結來說,以下是升級應用程式的步驟:
- 將第 9 版程式庫和相容性程式庫新增至應用程式。
- 將程式碼中的匯入陳述式更新為 v9 相容性。
- 將程式碼重構為模組化樣式。
- 移除驗證相容性程式庫和驗證相容性程式碼,以便實現應用程式大小的優勢。
- 將初始化程式碼更新為模組化樣式。
- 從應用程式中移除所有剩餘的 9 版相容性陳述式和相容性程式碼。
取得第 9 版 SDK
如要開始使用,請使用 npm 取得第 9 版程式庫和相容性程式庫 (最新版本請見 https://www.npmjs.com/package/firebase):
npm i firebase@11.8.0
# OR
yarn add firebase@11.8.0
將匯入內容更新至 v9 相容性
如要在將依附元件從 v8 更新為 v9 後繼續執行程式碼,請變更匯入陳述式,以便使用每個匯入的「相容性」版本。例如:
變更前:版本 8
import firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/firestore';
之後:第 9 版相容性
// v9 compat packages are API compatible with v8 code
import firebase from 'firebase/compat/app';
import 'firebase/compat/auth';
import 'firebase/compat/firestore';
重構為模組化樣式
雖然第 8 版 API 是以點連接命名空間和服務模式為基礎,第 9 版的模組化方法則是將程式碼主要以函式為主進行排序。在 9 版中,firebase/app 套件和其他套件不會傳回包含套件所有方法的完整匯出項目。而是匯出個別函式。
在 9 版中,服務會做為第一個引數傳遞,然後函式會使用服務的詳細資料執行其餘的動作。
範例:重構簡單的驗證函式
變更前:第 9 版相容性
版本 9 的相容性程式碼與版本 8 的程式碼相同,但匯入項目已變更。在升級期間使用相容性程式庫,可讓您繼續使用第 8 版程式碼,以及為第 9 版重構的程式碼。
import firebase from "firebase/compat/app";
import "firebase/compat/auth";
const auth = firebase.auth();
auth.onAuthStateChanged(user => {
// Check for user status
});
變更後:第 9 版模組化
getAuth
函式會將 firebaseApp
做為第一個參數。onAuthStateChanged
函式不會從驗證例項鏈結,因為這會在 8 版中發生;相反地,這是自由函式,會將 auth
做為第一個參數。
import { getAuth, onAuthStateChanged } from "firebase/auth";
const auth = getAuth(firebaseApp);
onAuthStateChanged(auth, user => {
// Check for user status
});
更新初始化程式碼
更新應用程式的初始化程式碼,以便使用新的模組化版本 9 語法。完成應用程式中所有程式碼的重構後,請務必更新此程式碼;這是因為 firebase.initializeApp()
會為相容性和模組化 API 初始化全域狀態,而模組化 initializeApp()
函式只會初始化模組化狀態。
變更前:第 9 版相容性
import firebase from "firebase/compat/app"
firebase.initializeApp({ /* config */ });
變更後:第 9 版模組化
import { initializeApp } from "firebase/app"
const firebaseApp = initializeApp({ /* config */ });
移除相容性程式碼
如要實現第 9 版模組化 SDK 的大小優勢,您應最終將所有叫用轉換為上述模組化樣式,並從程式碼中移除所有 import "firebase/compat/*
陳述式。完成後,版本 8 SDK 樣式的 firebase.*
全域命名空間或任何其他程式碼,都不會再有參照。
9 版的優點和限制
相較於先前版本,完全模組化的 9 版具有以下優點:
- 版本 9 可大幅縮減應用程式大小。它採用新式 JavaScript 模組格式,可讓您採用「樹狀圖搖晃」做法,只匯入應用程式所需的構件。視應用程式而定,使用 9 版的樹狀圖搖動功能,可比使用 8 版建構的類似應用程式,減少 80% 的千位元組。
- 版本 9 將持續受惠於持續開發的功能,而版本 8 則會在日後某個時間點凍結。