вот выдержка из болванки модуля, которой пользуюсь много лет. Может, сейчас есть вариант поудачнее, но это работает
<?php
use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
$requiredModules = array(
'iblock',
'catalog',
);
foreach ($requiredModules as $module) {
if (!Loader::includeModule($module)) {
die("Требуемый модуль {$module} не найден!");
}
}
$libDir = realpath(__DIR__ . '/lib');
$Directory = new RecursiveDirectoryIterator($libDir);
$Iterator = new RecursiveIteratorIterator($Directory);
$Regex = new RegexIterator($Iterator, '/^.+\.php$/i', RecursiveRegexIterator::GET_MATCH);
$classMap = array();
foreach ($Regex as $k => $v) {
// приводим к юниксовым путям, для единообразия
$relPath = str_replace('\\', '/', str_replace(__DIR__, '', $k));
// тут ещё и убираем расширение
$nsPath = substr(str_replace('\\', '/', str_replace($libDir, '', $k)), 0, -4);
$nsPath = 'MyNamespace' . str_replace('/', '\\', $nsPath);
$classMap[$nsPath] = $relPath;
}
Loader::registerAutoLoadClasses('my.module', $classMap);
Loc::loadMessages(__FILE__);