อัปเกรดเป็น 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');

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

นี่คือจุดแรกเข้าของโมดูลทั้งหมดที่มีใน SDK เวอร์ชัน 10

  • firebase-admin/app
  • Firebase-ผู้ดูแลระบบ/การตรวจสอบสิทธิ์
  • 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/กฎความปลอดภัย
  • 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();

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

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