Файл про устройство репозитория. Опорные точки модуля — в CLAUDE.md, процесс — в CONTRIBUTING.md, сборка — в build-and-install.md.
В статье:
Файл про устройство репозитория. Опорные точки модуля — в CLAUDE.md, процесс — в CONTRIBUTING.md, сборка — в build-and-install.md.
Composer разворачивает в целевой каталог корень пакета целиком и подкаталоги
выбирать не умеет. Поэтому lib/, install/, lang/ лежат прямо в корне
репозитория, рядом с build.sh и .github/.
Плата за это — два списка в шапке build.sh:
Файл, не попавший ни в один список, роняет сборку. Тот же список продублирован
в .gitattributes через export-ignore; списки обязаны совпадать, сверяется
автоматически, см. check_gitattributes.
lib/lib/ обязателенBitrix\Main\Loader отображает класс в путь строчными, разбирая первые два
сегмента namespace как id модуля: Shef\InSync\Main\Utils ищется как
bitrix/modules/shef.insync/lib/main/utils.php. Поэтому свой namespace в
registerNamespace не нужен — там только библиотеки XML.
На macOS заглавная буква сходит с рук, на боевом Linux класс просто не найдётся.
Проверяется в build.sh, check_lowercase, и в tests/autoload_test.php.
У vendor/ соглашение своё — PSR-4 с заглавными, путь задаёт .settings.php.
install/components/shef.insync/ -> /bitrix/components/shef.insync/
install/js/shef-insync/ui-anchors -> /bitrix/js/shef-insync/ui-anchors/
Каталог модуля браузеру недоступен, поэтому компоненты и js копирует
установщик — карта в .settings.php, ключ installDir. Расширение находится
ядром по имени shef-insync.ui-anchors: каталог через дефис — требование имён
расширений. Сходимость с раскладкой проверяет tests/assets_test.php.
До 2.0.0 компоненты ложились в /local/components/shef.insync. Ядро смотрит
туда первым, и оставшаяся копия перекрыла бы новую, поэтому установщик убирает
её и при установке, и при удалении.
Минифицированных копий (*.min.js, *.min.css) нет. Ядро берёт .min,
если он есть, — и устаревший .min молча побеждал бы исправленный исходник.
Отсутствие проверяет tests/assets_test.php. *.min.min.* — мусор сборщиков,
его отсекает .gitignore.
Раскладка страниц — штатные ui.* и свои несколько правил в style.css
шаблона. Сетка и карточки shef.uiclear ушли вместе с зависимостью.
Документация живёт в репозитории. В поставке остаётся только README.md — как
readme пакета, — и все ссылки из него ведут на GitHub.