JS-расширения и зависимости
JS-расширения платформы (/local/js/<module>/<ext>/) описываются в config.php, где задаются пути к ассетам, языковым пакетам и список зависимостей (rel). Метод \Bitrix\Main\UI\Extension::load() автоматически рекурсивно разворачивает граф зависимостей и гарантирует однократное подключение скриптов на странице независимо от числа вызовов в компонентах.
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
JS-расширения
-
2
Регистрация расширения
-
3
Зависимости
Материалы
Официальная документация
Проверь себя
Расширение работает на одной странице сайта и падает с «is not a constructor» на другой. Где искать причину?
В rel файла config.php. Класс берётся из глобального BX.*, зависимость не описана, и на первой странице её подключает соседний компонент. Проверять расширение нужно на чистой странице без стандартных компонентов.
Чем import из ES6-кода отличается от Extension::load() в PHP с точки зрения зависимостей?
Импорт видит сборщик @bitrix/cli и сам дописывает расширение в rel. Extension::load() только подключает ресурсы на странице, про зависимости он узнаёт из config.php, который вы заполнили руками или сборщиком.
Зачем пустой import без фигурных скобок, если из расширения ничего не нужно?
Для библиотек CoreJS 1.0 вроде main.date без экспортов. Без такого импорта сборщик не добавит их в rel, и в браузере их не окажется.
Что сломается, если один компонент на странице зовёт Extension::load() трижды?
Ничего: ядро подключает каждое расширение один раз и разворачивает rel рекурсивно. Дублирование появляется только когда те же файлы подключают мимо расширений через addJs.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить