升級至模組化 Web SDK (第 9 版)

如果應用程式目前使用 Web SDK 8 以下版本,建議您按照本指南中的操作說明,將應用程式遷移至 9 版。

本指南假設您熟悉第 8 版,且會利用 webpackRollup 等模組整合工具,進行升級和持續的第 9 版開發作業。

強烈建議您在開發環境中使用模組套件組合器。如果您沒有使用,就無法充分利用版本 9 在縮減應用程式大小方面的主要優點。您需要使用 npmyarn 安裝 SDK。

關於相容性程式庫

Web SDK 9 版提供兩種程式庫:

  • 模組化:新的 API 介面,旨在協助樹狀圖搖動 (移除未使用的程式碼),讓您的網路應用程式盡可能小且快速。
  • 相容性:這是與第 8 版完全相容的熟悉 API 介面,可讓您升級至第 9 版,而無須一次變更所有 SDK 程式碼。相較於 8 版,相容性程式庫的大小或效能優勢幾乎不存在。

本指南假設您會善用第 9 版的 Compat 程式庫,以利升級。這些程式庫可讓您繼續使用第 8 版程式碼,以及為第 9 版重構的程式碼。這表示您在升級過程中,可以更輕鬆地編譯及偵錯應用程式。

如果應用程式與 Web SDK 的接觸程度很低,不使用第 9 版相容性程式庫,可能更適合重構第 8 版程式碼。如果您要升級這類應用程式,可以按照本指南的「第 9 版模組化」部分操作說明,不必使用相容性程式庫。

關於升級程序

升級程序的每個步驟都會設有範圍,讓您可以完成應用程式來源的編輯作業,然後編譯並執行應用程式,而不會造成損壞。總結來說,以下是升級應用程式的步驟:

  1. 將第 9 版程式庫和相容性程式庫新增至應用程式。
  2. 將程式碼中的匯入陳述式更新為 v9 相容性。
  3. 將程式碼重構為模組化樣式。
  4. 移除驗證相容性程式庫和驗證相容性程式碼,以便實現應用程式大小的優勢。
  5. 將初始化程式碼更新為模組化樣式。
  6. 從應用程式中移除所有剩餘的 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 則會在日後某個時間點凍結。