อัปเกรดเป็น 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 เป็นเวอร์ชัน 12 ขึ้นไป

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');

ตั้งแต่เวอร์ชัน 10 เป็นต้นไป 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 ตั้งแต่เวอร์ชัน 10 มีดังนี้

  • Firebase-ผู้ดูแลระบบ/แอป
  • Firebase-ผู้ดูแลระบบ/การตรวจสอบสิทธิ์
  • Firebase-ผู้ดูแลระบบ/ฐานข้อมูล
  • Firebase-admin/firestore
  • Firebase-admin/รหัสอินสแตนซ์
  • ผู้ดูแลระบบ Firebase/แมชชีนเลิร์นนิง
  • Firebase-ผู้ดูแลระบบ/การรับส่งข้อความ
  • firebase-admin/project-management
  • Firebase-admin/remote-config
  • Firebase-admin/กฎความปลอดภัย
  • Firebase-ผู้ดูแลระบบ/พื้นที่เก็บข้อมูล

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

เวอร์ชัน 9 เวอร์ชัน 10
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();

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

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

เวอร์ชัน 9 เวอร์ชัน 10
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');