อัปเกรดเป็น Node.js SDK Admin SDK v10 (SDK แบบแยกส่วน)

Admin Node.js SDK เวอร์ชัน 10 มีการเปลี่ยนแปลงที่สำคัญ 2 รายการ ดังนี้

  • หยุดรองรับ Node.js 10 แล้ว (เป็นการเปลี่ยนแปลงที่ทำให้เกิดข้อผิดพลาด)
  • SDK ได้นำรูปแบบ API แบบโมดูลาร์มาใช้

คู่มือนี้มีคำแนะนำและข้อมูลที่จะช่วยให้นักพัฒนาแอปอัปเกรด แอป Node.js ที่มีอยู่จากเวอร์ชันก่อนหน้าของ Admin SDK เป็น v10

อัปเดต Node.js เป็น v12 ขึ้นไป

Firebase ได้หยุดรองรับ Node.js 10 แล้วเมื่อเปิดตัว Admin Node.js SDK v10 นักพัฒนาแอปต้องใช้ Node.js 12 ขึ้นไปเมื่อใช้ Admin SDK หากคุณใช้ Admin Node.js SDK ร่วมกับ Cloud Functions for Firebase, โปรดตรวจสอบว่าคุณได้ อัปเกรด Node.js เป็นเวอร์ชัน 12 ขึ้นไปแล้ว

ใช้โมดูลแทนเนมสเปซ

Admin Node.js SDK มี API ที่เสถียรซึ่งจัดโครงสร้างเป็นลำดับชั้นของเนมสเปซแบบซ้อนกันมาตั้งแต่เริ่มเปิดตัว ด้วยเหตุนี้ คุณจึงอาจคุ้นเคยกับการเขียนโค้ดที่มีลักษณะดังนี้

// Import the global admin namespace
import * as admin from 'firebase-admin';

const app: admin.app.App = admin.initializeApp();

const token: string = await admin.auth().createCustomToken('alice');

const user: admin.auth.UserRecord = await admin.auth().getUser('bob');

ตั้งแต่ v10 เป็นต้นไป Admin Node.js SDK จะมีจุดเริ่มต้นของโมดูลหลายจุดพร้อมการส่งออกที่มีชื่อ เราขอแนะนำให้นักพัฒนาแอปใช้จุดเริ่มต้นใหม่เหล่านี้เพื่อเข้าถึง API ต่างๆ ของ SDK แทนการใช้เนมสเปซ admin ทั่วโลก

ตัวอย่างด้านบนจะมีลักษณะดังนี้เมื่อใช้จุดเริ่มต้นของโมดูลใหม่

TypeScript

// Import only what you need
import { initializeApp, App } from 'firebase-admin/app';
import { getAuth, UserRecord } from 'firebase-admin/auth';

const app: App = initializeApp();

const token: string = await getAuth().createCustomToken('alice');

const user: UserRecord = getAuth().getUser('bob');

Node.js

// Import only what you need
const { initializeApp } = require('firebase-admin/app');
const { getAuth } = require('firebase-admin/auth');

const app = initializeApp();

const token = await getAuth().createCustomToken('alice');

const user = getAuth().getUser('bob');

การใช้จุดเริ่มต้นแบบโมดูลาร์ v10

โปรดทราบว่าในตัวอย่างด้านบน คุณจะไม่นำเข้าเนมสเปซ admin ทั่วโลกอีกต่อไป แต่คุณจะนำเข้าเฉพาะสัญลักษณ์ที่ต้องการจากจุดเริ่มต้นของโมดูลหลายจุดอย่างชัดเจน นอกจากนี้ นักพัฒนาแอป TypeScript ไม่จำเป็นต้องใช้ตัวระบุประเภทแบบซ้อน 3 ชั้น เช่น admin.auth.UserRecord และ admin.database.Reference อีกต่อไป เนื่องจากแต่ละประเภทเป็นของโมดูลเดียว คุณจึงนำเข้าได้โดยใช้ชื่อย่อ เช่น UserRecord และ Reference

จุดเริ่มต้นของโมดูลทั้งหมดที่ใช้ได้ใน SDK ตั้งแต่ v10 มีดังนี้

  • firebase-admin/app
  • firebase-admin/auth
  • firebase-admin/database
  • firebase-admin/firestore
  • firebase-admin/instance-id
  • firebase-admin/machine-learning
  • firebase-admin/messaging
  • firebase-admin/project-management
  • firebase-admin/remote-config
  • firebase-admin/security-rules
  • firebase-admin/storage

ตารางต่อไปนี้แสดงไวยากรณ์การนำเข้าที่ใช้แทนสำหรับฟังก์ชันเนมสเปซเดิมแต่ละฟังก์ชัน

v9 v10
admin.initializeApp() import { initializeApp } from 'firebase-admin/app'

initializeApp();

admin.app() import { getApp } from 'firebase-admin/ap'

getApp();

admin.credential.cert() import { cert } from 'firebase-admin/app'

cert();

admin.auth() import { getAuth } from 'firebase-admin/auth'

getAuth();

admin.database() import { getDatabase } from 'firebase-admin/database'

getDatabase();

admin.firestore() import { getFirestore } from 'firebase-admin/firestore'

getFirestore();

admin.instanceId() import { getInstanceId } from 'firebase-admin/instance-id'

getInstanceId();

admin.machineLearning() import { getMachineLearning } from 'firebase-admin/machine-learning'

getMachineLearning();

admin.messaging() import { getMessaging } from 'firebase-admin/messaging'

getMessaging()

admin.projectManagement() import { getProjectManagement } from 'firebase-admin/project-management'

getProjectManagement();

admin.remoteConfig() import { getRemoteConfig } from 'firebase-admin/remote-config'

getRemoteConfig();

admin.securityRules() import { getSecurityRules } from 'firebase-admin/security-rules'

getSecurityRules()

admin.storage() import { getStorage } from 'firebase-admin/storage'

getStorage();

ใช้ฟังก์ชันที่ส่งออกแทนเมธอดใน App

ใน API เดิม ออบเจ็กต์ App จะแสดงเมธอดต่างๆ เช่น app.auth() และ app.database() เราขอแนะนำให้นักพัฒนาแอปหลีกเลี่ยงการใช้เมธอดเหล่านี้ และใช้จุดเริ่มต้นของโมดูลเดียวกันที่อธิบายไว้ข้างต้นแทนเพื่อรับอินสแตนซ์ของบริการที่กำหนดขอบเขตไว้ที่ออบเจ็กต์ App ที่ระบุ และทำงานอื่นๆ ที่เฉพาะเจาะจงกับแอป

v9 v10
app.auth() import { getAuth } from 'firebase-admin/auth';

getAuth(app);

app.database() import { getDatabase } from 'firebase-admin/database';

getDatabase(app);

app.database(url) import { getDatabaseWithUrl } from 'firebase-admin/database';

getDatabaseWithUrl(url, app);

app.firestore() import { getFirestore } from 'firebase-admin/firestore'

getFirestore(app);

app.instanceId() import { getInstanceId } from 'firebase-admin/instance-id'

getInstanceId(app);

app.machineLearning() import { getMachineLearning } from 'firebase-admin/machine-learning'

getMachineLearning(app);

app.messaging() import { getMessaging } from 'firebase-admin/messaging'

getMessaging(app);

app.projectManagement() import { getProjectManagement } from 'firebase-admin/project-management'

getProjectManagement(app);

app.remoteConfig() import { getRemoteConfig } from 'firebase-admin/remote-config'

getRemoteConfig(app);

app.securityRules() import { getSecurityRules } from 'firebase-admin/security-rules'

getSecurityRules(app);

app.storage() import { getStorage } from 'firebase-admin/storage'

getStorage(app);

app.delete() import { deleteApp } from 'firebase-admin/app';

deleteApp(app);

การรองรับโมดูล ES

Node.js 12 ขึ้นไปมาพร้อมกับการรองรับโมดูล ES ในเวอร์ชันทดลอง ซึ่งช่วยให้นักพัฒนาแอปที่ไม่ใช่ TypeScript สามารถใช้คีย์เวิร์ด export และ import ในโค้ดได้ ตั้งแต่การเปิดตัว v10 เป็นต้นไป Admin Node.js SDK ยังรองรับโมดูล ES ด้วย เพื่อให้นักพัฒนาแอปที่ใช้โมดูล ES ใน Node.js ธรรมดาสามารถนำเข้า SDK โดยใช้ไวยากรณ์ import ได้

หากต้องการใช้โมดูล ES กับ Admin SDK ก่อนอื่นให้ตรวจสอบว่าคุณได้เปิดใช้การรองรับ ESM สำหรับรันไทม์ Node.js แล้ว โดยปกติแล้วจะทำได้โดยการเพิ่มฟิลด์ "type": "module" ลงในไฟล์ package.json จากนั้นคุณจะเขียนโค้ดแอปพลิเคชันที่มีลักษณะดังนี้ได้

// With {type: module} in the package.json...

// Import only what you need
import { initializeApp }  from 'firebase-admin/app';
import { getAuth } from 'firebase-admin/auth';

const app = initializeApp();

const token = await getAuth().createCustomToken('alice');

const user = getAuth().getUser('bob');