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Создание первого плагина
Next PageОбзор
Уведомление о переводе ИИ

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

#Структура проекта

Независимо от того, клонируете ли вы исходный код из Git или инициализируете проект с помощью create-nocobase-app, сгенерированный проект NocoBase по сути является монорепозиторием, основанным на Yarn Workspace.

#Обзор каталогов верхнего уровня

В следующем примере my-nocobase-app/ используется как корневой каталог проекта. В разных средах могут быть небольшие отличия:

my-nocobase-app/
├── packages/              # Исходный код проекта
│   ├── plugins/           # Исходный код разрабатываемых плагинов (нескомпилированный)
├── storage/               # Данные времени выполнения и динамически генерируемый контент
│   ├── apps/
│   ├── db/
│   ├── logs/
│   ├── uploads/
│   ├── plugins/           # Скомпилированные плагины (включая загруженные через интерфейс)
│   └── tar/               # Файлы пакетов плагинов (.tar)
├── scripts/               # Вспомогательные скрипты и утилиты
├── .env*                  # Конфигурация переменных для различных сред
├── lerna.json             # Конфигурация рабочего пространства Lerna
├── package.json           # Конфигурация корневого пакета, объявляет рабочее пространство и скрипты
├── tsconfig*.json         # Конфигурации TypeScript (фронтенд, бэкенд, сопоставление путей)
├── vitest.config.mts      # Конфигурация модульных тестов Vitest
└── playwright.config.ts   # Конфигурация E2E-тестов Playwright

#Описание подкаталога packages/

Каталог packages/ содержит основные модули NocoBase и расширяемые пакеты. Его содержимое зависит от источника проекта:

  • Проекты, созданные с помощью create-nocobase-app: По умолчанию содержат только packages/plugins/, где хранится исходный код пользовательских плагинов. Каждый подкаталог является независимым npm-пакетом.
  • Клонированный официальный репозиторий исходного кода: Вы увидите больше подкаталогов, таких как core/, plugins/, pro-plugins/, presets/ и т.д., которые соответствуют ядру фреймворка, встроенным плагинам и официальным предустановленным решениям.

В любом случае, packages/plugins является основным местом для разработки и отладки пользовательских плагинов.

#Каталог storage/ для данных времени выполнения

В storage/ хранятся данные, генерируемые во время выполнения, и результаты сборки. Ниже приведено описание распространенных подкаталогов:

  • apps/: Конфигурация и кэш для сценариев с несколькими приложениями.
  • logs/: Журналы выполнения и вывод отладки.
  • uploads/: Загруженные пользователями файлы и медиаресурсы.
  • plugins/: Упакованные плагины, загруженные через интерфейс или импортированные через CLI.
  • tar/: Сжатые пакеты плагинов, сгенерированные после выполнения yarn build <plugin> --tar.

Обычно рекомендуется добавлять каталог storage в .gitignore и обрабатывать его отдельно при развертывании или резервном копировании.

#Конфигурация среды и скрипты проекта

  • .env, .env.test, .env.e2e: Используются для локального запуска, модульного/интеграционного тестирования и сквозного (E2E) тестирования соответственно.
  • scripts/: Содержит часто используемые скрипты для операций (например, инициализация базы данных, вспомогательные инструменты для выпуска и т.д.).

#Пути загрузки плагинов и их приоритет

Плагины могут находиться в нескольких местах. При запуске NocoBase загружает их в следующем порядке приоритета:

  1. Версия исходного кода в packages/plugins (для локальной разработки и отладки).
  2. Упакованная версия в storage/plugins (загруженная через интерфейс или импортированная через CLI).
  3. Пакеты зависимостей в node_modules (установленные через npm/yarn или встроенные во фреймворк).

Если плагин с одним и тем же именем существует как в каталоге исходного кода, так и в каталоге с упакованными версиями, система будет отдавать приоритет загрузке версии из исходного кода, что упрощает локальное переопределение и отладку.

#Шаблон каталога плагина

Создание плагина с помощью CLI:

yarn pm create @my-project/plugin-hello

Сгенерированная структура каталогов выглядит следующим образом:

packages/plugins/@my-project/plugin-hello/
├── dist/                    # Результаты сборки (генерируются по мере необходимости)
├── src/                     # Каталог исходного кода
│   ├── client/              # Код фронтенда (блоки, страницы, модели и т.д.)
│   │   ├── plugin.ts        # Основной класс клиентского плагина
│   │   └── index.ts         # Точка входа клиентской части
│   ├── locale/              # Многоязычные ресурсы (общие для фронтенда и бэкенда)
│   ├── swagger/             # Документация OpenAPI/Swagger
│   └── server/              # Код бэкенда
│       ├── collections/     # Определения коллекций
│       ├── commands/        # Пользовательские команды
│       ├── migrations/      # Скрипты миграции базы данных
│       ├── plugin.ts        # Основной класс серверного плагина
│       └── index.ts         # Точка входа серверной части
├── index.ts                 # Экспорт для связи фронтенда и бэкенда
├── client.d.ts              # Объявления типов фронтенда
├── client.js                # Артефакт сборки фронтенда
├── server.d.ts              # Объявления типов бэкенда
├── server.js                # Артефакт сборки бэкенда
├── .npmignore               # Конфигурация игнорирования при публикации
└── package.json

После завершения сборки каталог dist/ и файлы client.js, server.js будут загружены при включении плагина.
На этапе разработки вам нужно изменять только каталог src/. Перед публикацией выполните yarn build <plugin> или yarn build <plugin> --tar.