Plugin

Di NocoBase, Server Plugin adalah cara utama untuk memperluas fungsi server. Anda dapat extends class dasar Plugin yang disediakan oleh @nocobase/server di src/server/plugin.ts direktori plugin Anda, kemudian mendaftarkan event, API, hak akses, dan logika kustom lainnya pada tahap siklus hidup yang berbeda.

Class Plugin

Struktur class plugin dasar adalah sebagai berikut:

import { Plugin } from '@nocobase/server';

export class PluginHelloServer extends Plugin {
  async afterAdd() {}

  async beforeLoad() {}

  async load() {}

  async install() {}

  async afterEnable() {}

  async afterDisable() {}

  async remove() {}

  async handleSyncMessage(message: Record<string, any>) {}

  static async staticImport() {}
}

export default PluginHelloServer;

Siklus Hidup

Method siklus hidup plugin dieksekusi dalam urutan berikut, masing-masing memiliki waktu eksekusi dan tujuan tertentu:

Method Siklus HidupWaktu EksekusiPenjelasan
staticImport()Sebelum plugin dimuatMethod statis class, dieksekusi pada tahap inisialisasi yang tidak terkait dengan status aplikasi atau plugin, digunakan untuk pekerjaan inisialisasi yang tidak bergantung pada instance plugin.
afterAdd()Segera setelah plugin ditambahkan ke PluginManagerPada saat ini instance plugin sudah dibuat, tetapi belum semua plugin selesai diinisialisasi, dapat melakukan beberapa inisialisasi dasar.
beforeLoad()Dieksekusi sebelum load() semua pluginPada saat ini sudah dapat mengakses semua instance plugin yang sudah aktif. Cocok untuk pekerjaan persiapan seperti mendaftarkan model database, mendengarkan event database, mendaftarkan middleware, dll.
load()Dieksekusi saat plugin dimuatload() baru akan mulai dieksekusi setelah beforeLoad() semua plugin selesai. Cocok untuk logika bisnis inti seperti mendaftarkan resource, API, dll. — misalnya mendaftarkan REST API kustom melalui resourceManager. Perhatian: Pada tahap load() database belum selesai sinkronisasi, tidak boleh mengeksekusi query atau operasi tulis database — operasi database harus diletakkan di install() atau dalam fungsi handler request.
install()Dieksekusi saat plugin pertama kali diaktifkanHanya dieksekusi sekali saat plugin pertama kali diaktifkan, biasanya digunakan untuk logika instalasi seperti menginisialisasi struktur tabel database, menyisipkan data awal, dll. install() hanya dieksekusi saat aktivasi pertama — jika versi berikutnya perlu mengubah struktur tabel atau migrasi data, harus ditangani melalui Migration Skrip Upgrade.
afterEnable()Dieksekusi setelah plugin diaktifkanDieksekusi setiap kali plugin diaktifkan, dapat digunakan untuk memulai tugas terjadwal, membangun koneksi, dll.
afterDisable()Dieksekusi setelah plugin dinonaktifkanDapat digunakan untuk membersihkan resource, menghentikan tugas, menutup koneksi, dll.
remove()Dieksekusi saat plugin dihapusDigunakan untuk menulis logika uninstall, seperti menghapus tabel database, membersihkan file, dll.
handleSyncMessage(message)Sinkronisasi pesan saat deployment multi-nodeSaat aplikasi berjalan dalam mode multi-node, digunakan untuk menangani pesan yang disinkronkan dari node lain.

Penjelasan Urutan Eksekusi

Alur eksekusi tipikal method siklus hidup:

  1. Tahap Inisialisasi Statis: staticImport()
  2. Tahap Startup Aplikasi: afterAdd()beforeLoad()load()
  3. Tahap Aktivasi Pertama Plugin: afterAdd()beforeLoad()load()install()
  4. Tahap Aktivasi Berikutnya Plugin: afterAdd()beforeLoad()load()
  5. Tahap Deaktivasi Plugin: Eksekusi afterDisable() saat menonaktifkan plugin
  6. Tahap Penghapusan Plugin: Eksekusi remove() saat menghapus plugin

Member app dan Terkait

Dalam pengembangan plugin, melalui this.app Anda dapat mengakses berbagai API yang disediakan oleh instance aplikasi — ini adalah entry point inti untuk plugin memperluas fungsionalitas. Objek app berisi berbagai modul fungsional sistem, Anda dapat menggunakannya dalam method siklus hidup plugin.

Daftar Member app

Nama MemberTipe/ModulTujuan Utama
loggerLoggerMencatat log sistem, mendukung level info, warn, error, debug, dll. Lihat Logger Log
dbDatabaseOperasi layer ORM, registrasi model, listen event, kontrol transaksi, dll. Lihat Database
resourceManagerResourceManagerMendaftarkan dan mengelola resource REST API dan handler operasi. Lihat ResourceManager Manajemen Resource
aclACLMendefinisikan hak akses, role, dan kebijakan akses resource. Lihat ACL Kontrol Hak Akses
cacheManagerCacheManagerMengelola cache level sistem, mendukung berbagai backend seperti Redis, cache memori. Lihat Cache
cronJobManagerCronJobManagerMendaftarkan dan mengelola tugas terjadwal, mendukung ekspresi Cron. Lihat CronJobManager Tugas Terjadwal
i18nI18nTerjemahan multi-bahasa dan lokalisasi. Lihat I18n Internasionalisasi
cliCLIMendaftarkan command kustom, memperluas NocoBase CLI. Lihat Command Command Line
dataSourceManagerDataSourceManagerMengelola beberapa instance data source dan koneksinya. Lihat DataSourceManager Manajemen Data Source
pmPluginManagerMemuat, mengaktifkan, menonaktifkan, menghapus plugin secara dinamis, mengelola hubungan dependensi antar plugin.
Tips

Untuk penggunaan detail setiap modul, silakan merujuk ke bagian dokumentasi yang sesuai.

Tautan Terkait