logologo
Начало
Руководство
Разработка
Плагины
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Начало
Руководство
Разработка
Плагины
API
logologo

Быстрый старт

Обзор разработки плагинов
Создание первого плагина
Структура каталогов проекта

Серверная разработка

Обзор
Плагин
Коллекции (таблицы данных)
Операции с базой данных
Управление источниками данных (DataSourceManager)
Управление ресурсами (ResourceManager)
Контроль доступа (ACL)
Промежуточное ПО (Middleware)
Кэш
Событие
Контекст запроса
Миграции
Логгер
Интернационализация (I18n)
Командная строка
Управление задачами Cron (CronJobManager)
Тестирование

Клиентская разработка

Обзор
Плагин
Контекст
Маршрутизатор
Контроль доступа (ACL)
Управление источниками данных (DataSourceManager)
Ресурс
Запрос
Стили и темы
Логгер
Интернационализация (I18n)
Тестирование

Прочее

Руководство по обновлению плагинов
Список языков
Управление зависимостями
Сборка
Previous PageИнтернационализация (I18n)
Next PageУправление задачами Cron (CronJobManager)
Уведомление о переводе ИИ

Эта документация была автоматически переведена ИИ.

#Команды

В NocoBase команды используются для выполнения операций, связанных с приложениями или плагинами, прямо из командной строки. С их помощью можно запускать системные задачи, выполнять миграции или синхронизации, инициализировать конфигурации или взаимодействовать с запущенными экземплярами приложений. Разработчики могут определять собственные команды для плагинов, регистрировать их через объект 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...');
    });
});