Upgrade ke Node.js SDK Admin SDK v10 (SDK modular)

Admin Node.js SDK versi 10 menghadirkan dua perubahan penting:

  • Dukungan untuk Node.js 10 telah dihentikan (ini adalah perubahan yang dapat menyebabkan gangguan)
  • SDK telah mengadopsi pola API modular

Panduan ini memberikan petunjuk dan informasi untuk membantu developer mengupgrade aplikasi Node.js yang ada dari versi Admin SDK sebelumnya ke v10.

Mengupdate Node.js ke v12 atau yang lebih tinggi

Dengan rilis Admin Node.js SDK v10, Firebase telah menghentikan dukungan untuk Node.js 10. Developer harus menggunakan Node.js 12 atau versi yang lebih tinggi saat menggunakan Admin SDK. Jika Anda menggunakan Admin Node.js SDK dengan Cloud Functions for Firebase, pastikan Anda telah mengupgrade versi Node.js ke versi 12 atau yang lebih tinggi.

Menggunakan modul, bukan namespace

Sejak awal, Admin Node.js SDK telah menawarkan API terstruktur yang stabil sebagai hierarki namespace bertingkat. Akibatnya, Anda mungkin terbiasa menulis kode yang terlihat seperti ini:

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

Mulai dari v10, Admin Node.js SDK menawarkan beberapa titik masuk modul dengan ekspor bernama. Sebaiknya developer menggunakan titik entri baru ini untuk mengakses berbagai API SDK, bukan menggunakan namespace admin global.

Berikut adalah tampilan contoh di atas dengan titik masuk modul yang baru:

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

Menggunakan titik entri modular v10

Perhatikan bahwa dalam contoh di atas, Anda tidak lagi mengimpor namespace admin global. Sebaliknya, Anda secara eksplisit hanya mengimpor simbol yang diperlukan dari beberapa titik masuk modul. Selain itu, developer TypeScript tidak perlu lagi menggunakan ID jenis tiga tingkat seperti admin.auth.UserRecord dan admin.database.Reference. Karena setiap jenis termasuk dalam satu modul, Anda dapat mengimpornya dengan nama pendek seperti UserRecord dan Reference.

Berikut adalah semua titik entri modul yang tersedia di SDK mulai 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

Tabel berikut menunjukkan sintaksis impor pengganti untuk setiap fungsi namespace lama:

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

Menggunakan fungsi yang diekspor, bukan metode di Aplikasi

Di API lama, objek App menampilkan sejumlah metode seperti app.auth() dan app.database(). Sebaiknya developer tidak menggunakan metode ini, melainkan menggunakan titik entri modul yang sama seperti yang dijelaskan di atas untuk mendapatkan instance layanan yang dicakupkan ke objek App tertentu, dan melakukan tugas khusus aplikasi lainnya.

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

Dukungan modul ES

Node.js 12 dan yang lebih tinggi dilengkapi dengan dukungan eksperimental untuk modul ES, sehingga bahkan developer non-TypeScript dapat menggunakan kata kunci export dan import dalam kodenya. Mulai dari rilis v10, Admin Node.js SDK juga menyediakan dukungan modul ES, sehingga developer yang menerapkan modul ES di Node.js biasa dapat mengimpor SDK menggunakan sintaksis import.

Untuk menggunakan modul ES dengan Admin SDK, pastikan terlebih dahulu bahwa dukungan ESM untuk runtime Node.js telah diaktifkan. Ini biasanya dilakukan dengan menambahkan kolom "type": "module" ke file package.json Anda. Kemudian Anda bisa menulis kode aplikasi yang terlihat seperti ini:

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