logologo
开始
手册
开发
插件
API
English
简体中文
开始
手册
开发
插件
API
English
简体中文
logologo

快速入门

插件开发概述
编写第一个插件
项目目录结构

服务端开发

概述
Plugin 插件
Collections 数据表
Database 数据库操作
DataSourceManager 数据源管理
ResourceManager 资源管理
ACL 权限控制
Middleware 中间件
Cache 缓存
Event 事件
Context 请求上下文
Migration 升级脚本
Logger日志
I18n 国际化
Command 命令行
CronJobManager 定时任务管理
Test 测试

客户端开发

概述
Plugin 插件
Context 上下文
Router 路由
ACL 权限控制
DataSourceManager 数据源管理
Resource 资源
Request 请求
Styles & Themes 样式与主题
Logger 日志
I18n 国际化
Test 测试

其他

插件升级指南
语言列表
依赖管理
构建
Previous PageI18n 国际化
Next PageCronJobManager 定时任务管理

#Command 命令行

在 NocoBase 中,命令(Command)用于在命令行中执行与应用或插件相关的操作,例如运行系统任务、执行迁移或同步操作、初始化配置,或与正在运行的应用实例进行交互。开发者可以为插件定义自定义命令,并通过 app 对象进行注册,在 CLI 中以 nocobase <command> 的形式执行。

#命令类型

在 NocoBase 中,命令的注册方式分为两类:

类型注册方式插件是否需要启用典型场景
动态命令app.command()✅ 是插件业务相关命令
静态命令Application.registerStaticCommand()❌ 否安装、初始化、维护类命令

#动态命令

使用 app.command() 定义插件命令,插件被启用后才能执行。命令文件应放在插件目录下的 src/server/commands/*.ts 中。

示例

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

export default function (app: Application) {
  app.
    .command('echo')
    .option('-v, --version')
    .action(async ([options]) => {
      console.log('Hello World!');
      if (options.version) {
        console.log('Current version:', await app.version.get());
      }
    });
}

说明

  • app.command('echo'):定义一个名为 echo 的命令。
  • .option('-v, --version'):为命令添加选项。
  • .action():定义命令执行逻辑。
  • app.version.get():获取当前应用版本。

执行命令

nocobase echo
nocobase echo -v

#静态命令

使用 Application.registerStaticCommand() 注册,静态命令无需启用插件即可执行,适用于安装、初始化、迁移或调试类任务。在插件类的 staticImport() 方法中注册。

示例

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

export default class PluginHelloServer extends Plugin {
  static staticImport() {
    Application.registerStaticCommand((app: Application) => {
      app
        .command('echo')
        .option('-v, --version')
        .action(async ([options]) => {
          console.log('Hello World!');
          if (options.version) {
            console.log('Current version:', await app.version.get());
          }
        });
    });
  }
}

执行命令

nocobase echo
nocobase echo --version

说明

  • Application.registerStaticCommand() 会在应用实例化前注册命令。
  • 静态命令通常用于执行与应用或插件状态无关的全局任务。

#Command API

命令对象提供了三个可选的辅助方法,用于控制命令的执行上下文:

方法作用示例
ipc()与正在运行的应用实例通信(通过 IPC)app.command('reload').ipc().action()
auth()验证数据库配置是否正确app.command('seed').auth().action()
preload()预加载应用配置(执行 app.load())app.command('sync').preload().action()

配置说明

  • ipc()
    默认情况下,命令会在一个新的应用实例中执行。
    启用 ipc() 后,命令会通过进程间通信(IPC)与当前正在运行的应用实例交互,适合实时操作命令(如刷新缓存、发送通知)。

  • auth()
    在命令执行前检查数据库配置是否可用。
    如果数据库配置错误或连接失败,命令不会继续执行。常用于涉及数据库写入或读取的任务。

  • preload()
    在执行命令前预加载应用配置,相当于执行 app.load()。
    适用于依赖于配置或插件上下文的命令。

更多 API 方法请参考 AppCommand。

#常见示例

初始化默认数据

app
  .command('init-data')
  .auth()
  .preload()
  .action(async () => {
    const repo = app.db.getRepository('users');
    await repo.create({ values: { username: 'admin' } });
    console.log('Initialized default admin user.');
  });

让运行中实例重新加载缓存(IPC 模式)

app
  .command('reload-cache')
  .ipc()
  .action(async () => {
    console.log('Requesting running app to reload cache...');
  });

静态注册安装命令

Application.registerStaticCommand((app) => {
  app
    .command('setup')
    .action(async () => {
      console.log('Setting up NocoBase environment...');
    });
});