Команды разработки (dev)
Стандартные команды Битрикс для разработки: генерация метаданных для IDE и создание структуры директорий в существующем модуле.
Краткая справка
| Команда | Что делает | Важно знать |
|---|---|---|
dev:locator-codes | Генерирует .phpstorm.meta.php для автодополнения Service Locator | Требует существующий модуль |
dev:module-skeleton | Создаёт только поддиректории в /lib существующего модуля | ⚠️ НЕ создаёт модуль с нуля! Только папки в уже существующем модуле |
Создание модуля
Для создания нового модуля используйте ручное создание структуры + команды make:* для генерации компонентов. См. раздел Создание нового модуля с нуля
dev:locator-codes
Генерирует файл .phpstorm.meta.php для автодополнения Service Locator в PhpStorm.
Синтаксис
php bitrix.php dev:locator-codes <module> [code]Аргументы
module- ID модуля для генерации метаданныхcode- код для генерации (необязательный параметр)
Опции
--show- выводит содержимое в консоль без сохранения файла
Примеры использования
# Генерация файла метаданных для модуля main
php bitrix.php dev:locator-codes main
# С указанием кода
php bitrix.php dev:locator-codes iblock bitrix_iblock_locator_codes
# Вывод в консоль (без сохранения)
php bitrix.php dev:locator-codes main --show
# Сохранение в произвольный файл
php bitrix.php dev:locator-codes main --show > ./my/custom/path/.phpstorm.meta.php
# Для других модулей
php bitrix.php dev:locator-codes catalog
php bitrix.php dev:locator-codes saleЧто делает команда
Команда создает файл метаданных .phpstorm.meta.php, который помогает PhpStorm:
- Распознавать сервисы из Service Locator'а Битрикс
- Предоставлять автодополнение для методов
- Улучшать навигацию по коду
- Предоставлять подсказки по типам
Где сохраняется файл
По умолчанию файл сохраняется в корне модуля:
/bitrix/modules/<module>/.phpstorm.meta.phpПример сгенерированного файла
<?php
namespace PHPSTORM_META {
registerArgumentsSet('service_locator_services',
'main.user',
'main.application',
'iblock.element',
// ... другие сервисы
);
expectedArguments(
\Bitrix\Main\DI\ServiceLocator::get(),
0,
argumentsSet('service_locator_services')
);
}dev:module-skeleton
ВАЖНО
Эта команда НЕ создаёт модуль с нуля. Она только создаёт структуру поддиректорий внутри уже существующего модуля в папке /lib.
Перед использованием команды необходимо вручную создать базовую структуру модуля.
Создаёт структуру поддиректорий в папке /lib существующего модуля.
Синтаксис
php bitrix.php dev:module-skeleton <module> [dir]Аргументы
module- ID существующего модуля (формат:vendor.module)dir- название поддиректории для создания в/lib(необязательный параметр)
Как это работает
Команда:
- Проверяет существование модуля в
/bitrix/modules/<module>/или/local/modules/<module>/ - Если модуль не найден - выдаёт ошибку: "No such module"
- Если модуль найден - создаёт поддиректории в
/lib/[Dir]/
Правильная последовательность создания модуля
# 1. Сначала создайте базовую структуру модуля вручную
mkdir -p /local/modules/my.custom.module/lib
mkdir -p /local/modules/my.custom.module/install
# 2. Теперь можно использовать команду для создания поддиректорий
php bitrix.php dev:module-skeleton my.custom.module EntityПримеры использования
# ❌ НЕ РАБОТАЕТ - модуль не существует
php bitrix.php dev:module-skeleton my.custom.module
# Ошибка: No such module
# ✅ РАБОТАЕТ - сначала создаём модуль
mkdir -p /local/modules/my.custom.module/lib
php bitrix.php dev:module-skeleton my.custom.module
# ✅ Создание поддиректории Entity в существующем модуле
php bitrix.php dev:module-skeleton my.custom.module Entity
# Создаст: /local/modules/my.custom.module/lib/Entity/
# ✅ Создание вложенной структуры
php bitrix.php dev:module-skeleton my.custom.module Controller/Api
# Создаст: /local/modules/my.custom.module/lib/Controller/Api/Что на самом деле создаёт команда
Команда создаёт только пустые директории в /lib:
/local/modules/vendor.module/lib/[Dir]/Команда НЕ создаёт:
- ❌ Файл
install/index.php - ❌ Файл
install/version.php - ❌ Файл
include.php - ❌ Файл
options.php - ❌ Языковые файлы
- ❌ Базовую структуру модуля
Продвинутые сценарии
Автоматическое обновление метаданных после установки модулей
#!/bin/bash
# Хук для обновления метаданных после установки модуля
MODULE_ID="$1"
if [ -z "$MODULE_ID" ]; then
echo "Использование: $0 <module_id>"
exit 1
fi
cd /var/www/bitrix
# Установить модуль
php bitrix.php module:install "$MODULE_ID"
# Сгенерировать метаданные
php bitrix.php dev:locator-codes "$MODULE_ID"
# Очистить кеш
php bitrix.php cache:clear
echo "Модуль $MODULE_ID установлен, метаданные обновлены"CI/CD: генерация метаданных при деплое
#!/bin/bash
# Скрипт деплоя с генерацией метаданных
cd /var/www/bitrix
# Обновить код
git pull origin master
# Установить зависимости
composer install
# Обновить метаданные для кастомных модулей
for module in /local/modules/company.*; do
if [ -d "$module" ]; then
MODULE_ID=$(basename "$module")
echo "Обновление метаданных: $MODULE_ID"
php bitrix.php dev:locator-codes "$MODULE_ID"
fi
done
# Очистить кеш
php bitrix.php cache:clear
echo "Деплой завершен"Troubleshooting
Метаданные не генерируются
Проблема: Файл .phpstorm.meta.php не создается
Решения:
- Проверьте права доступа к директории модуля
- Убедитесь, что модуль существует и установлен
- Используйте опцию
--showдля проверки вывода - Проверьте логи PHP
PhpStorm не видит автодополнение
Проблема: После генерации метаданных автодополнение не работает
Решения:
- Перезапустите PhpStorm
- Invalidate Caches: File → Invalidate Caches → Invalidate and Restart
- Убедитесь, что файл
.phpstorm.meta.phpнаходится в корне модуля - Проверьте синтаксис сгенерированного файла
Ошибка "No such module"
Проблема: При выполнении dev:module-skeleton выдаётся ошибка "No such module"
Причина: Команда ищет уже существующий модуль. Она не создаёт модуль с нуля.
Решение:
- Сначала создайте базовую структуру модуля вручную:
mkdir -p /local/modules/my.custom.module/lib
mkdir -p /local/modules/my.custom.module/install- Только потом используйте команду:
php bitrix.php dev:module-skeleton my.custom.module EntityКоманда создаёт пустые директории
Проблема: Команда создаёт только пустые папки без файлов
Причина: Это нормальное поведение. Команда dev:module-skeleton создаёт только структуру директорий в /lib.
Решение:
- Файлы модуля (install/index.php, include.php и т.д.) создавайте вручную
- Или используйте команды
make:*для генерации компонентов, контроллеров и ORM-классов
Полезные советы
💡 dev:module-skeleton - не создаёт модуль - команда только делает поддиректории в существующем модуле
💡 Создавайте модули вручную - используйте скрипты для автоматизации создания базовой структуры
💡 Генерируйте метаданные регулярно - обновляйте после установки новых модулей командой dev:locator-codes
💡 Используйте make-команды - для генерации компонентов, контроллеров и ORM используйте make:*
💡 Интегрируйте в CI/CD - автоматизируйте генерацию метаданных при деплое
💡 Следуйте PSR-4 - размещайте классы в /lib с правильным namespace
💡 Версионируйте модули - обновляйте версию в install/version.php при изменениях
Смотрите также
- Команды make - создание компонентов, контроллеров и ORM-классов
- Команды модулей - установка и управление модулями
- Официальная документация Битрикс по созданию модулей