docs/docs/cn/plugin-development/server/plugin.md
在 NocoBase 中,服务端插件(Server Plugin) 是扩展服务端功能的主要方式。你可以在插件目录的 src/server/plugin.ts 里继承 @nocobase/server 提供的 Plugin 基类,然后在不同的生命周期阶段注册事件、接口、权限等自定义逻辑。
一个基本的插件类结构如下:
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;
插件的生命周期方法按以下顺序执行,每个方法都有特定的执行时机和用途:
| 生命周期方法 | 执行时机 | 说明 |
|---|---|---|
| staticImport() | 插件加载前 | 类的静态方法,在跟应用或插件状态无关的初始化阶段执行,用于不依赖插件实例的初始化工作。 |
| afterAdd() | 插件被添加到 PluginManager 后立即执行 | 此时插件实例已创建,但并非所有插件都已初始化完成,可以做一些基础的初始化。 |
| beforeLoad() | 在所有插件的 load() 之前执行 | 此时已经能拿到所有已启用的插件实例。适合注册数据库模型、监听数据库事件、注册中间件等准备工作。 |
| load() | 插件加载时执行 | 所有插件的 beforeLoad() 执行完毕后才会开始执行 load()。适合注册资源、API 接口等核心业务逻辑——比如通过 resourceManager 注册自定义 REST API。注意: load() 阶段数据库还没有完成同步,不能执行数据库查询或写入操作——数据库操作应放在 install() 或请求处理函数中。 |
| install() | 插件首次激活时执行 | 只在插件第一次被启用时执行一次,通常来说用于初始化数据库表结构、插入初始数据等安装逻辑。install() 只在首次激活时执行——如果后续版本需要变更表结构或迁移数据,应该用 Migration 升级脚本 来处理。 |
| afterEnable() | 插件被启用后执行 | 每次插件被启用时都会执行,可以用来启动定时任务、建立连接等。 |
| afterDisable() | 插件被禁用后执行 | 可以用来清理资源、停止任务、关闭连接等。 |
| remove() | 插件被删除时执行 | 用于编写卸载逻辑,比如删除数据库表、清理文件等。 |
| handleSyncMessage(message) | 多节点部署时的消息同步 | 应用运行在多节点模式下时,用于处理从其他节点同步过来的消息。 |
生命周期方法的典型执行流程:
staticImport()afterAdd() → beforeLoad() → load()afterAdd() → beforeLoad() → load() → install()afterAdd() → beforeLoad() → load()afterDisable()remove()在插件开发中,通过 this.app 可以访问应用实例提供的各种 API——这是插件扩展功能的核心入口。app 对象包含了系统的各个功能模块,你可以在插件的生命周期方法中使用它们。
| 成员名称 | 类型/模块 | 主要用途 |
|---|---|---|
| logger | Logger | 记录系统日志,支持 info、warn、error、debug 等级别。详见 Logger 日志 |
| db | Database | ORM 层操作、模型注册、事件监听、事务控制等。详见 Database 数据库 |
| resourceManager | ResourceManager | 注册和管理 REST API 资源与操作处理器。详见 ResourceManager 资源管理 |
| acl | ACL | 定义权限、角色和资源访问策略。详见 ACL 权限控制 |
| cacheManager | CacheManager | 管理系统级缓存,支持 Redis、内存缓存等多种后端。详见 Cache 缓存 |
| cronJobManager | CronJobManager | 注册和管理定时任务,支持 Cron 表达式。详见 CronJobManager 定时任务 |
| i18n | I18n | 多语言翻译和本地化。详见 I18n 国际化 |
| cli | CLI | 注册自定义命令,扩展 NocoBase CLI。详见 Command 命令行 |
| dataSourceManager | DataSourceManager | 管理多个数据源实例及其连接。详见 DataSourceManager 数据源管理 |
| pm | PluginManager | 动态加载、启用、禁用、删除插件,管理插件间的依赖关系。 |
:::tip 提示
各个模块的详细用法,请参考对应的文档章节。
:::