Composer не генерирует информацию автозагрузчика (autoload_namespaces.php)

У меня проблемы с правильной установкой проекта с помощью композитора. У меня есть собственный пользовательский пакет (библиотека), размещенный в не публичном git-репо (но централизованном), который извлекается композитором (фиктивный проект, содержащий композитор.json для тестирования моего пакета).

Таким образом, структура выглядит так:


/test/project/composer.json index.php 

Содержание композитора.json:

 { "name": "vendor/test", "description": "Test-description", "authors": [{ "name": "Benjamin Carl", "email": "email@testdomain.com", "homepage": "http://www.testdomain.com", "role": "Developer" }], "keywords": [ "foo", "bar" ], "homepage" : "http://www.testdomain.com/", "license" : [ "The BSD License" ], "repositories": [{ "type": "package", "package": { "name": "foo/bar", "version": "0.0.1", "source": { "url": "git@git.testdomain.local:benjamin.carl/bar.git", "type": "git", "reference": "master" } } }], "require": { "foo/bar": "0.0.1" } } 

Поэтому, когда я запускаю композитор, установите «php composer.phar install» в папку, содержащую тестовый проект и композитор.json, который вы видите выше – все кажется прекрасным, но – отсутствует информация автозагрузчика – карта (массив) в «autoload_namespaces.php» (создаваемые файлы) остается пустым.

Я предположил, что когда я устанавливаю пакет с композитором и пакетом (в моем случае пакет foo / bar) содержит файл composer.json – этот файл также выполняется / обрабатывается во время установки, и из него берется информация для автозагрузки (пакет ) файл composer.json. Я прав? Или я делаю что-то неправильно?


Вот содержание файла «composer.json» из пакета foo / bar:

 { "name": "foo/bar", "description": "foo - the project for all bars out there.", "authors": [{ "name": "Benjamin Carl", "email": "email@testdomain.com", "homepage": "http://www.testdomain.com", "role": "Developer" }], "keywords": [ "php", "foo", "bar", "baz" ], "homepage": "http://testdomain.com/", "license": [ "The BSD License" ], "require": { "php": ">=5.3.0" }, "autoload": { "psr-0": { "Foo": "Framework/" } }, "include-path": ["Framework/"], "support": { "email": "email@testdomain.com", "issues": "https://testdomain.com/issues", "wiki": "https://testdomain.com/wiki" }, "repositories": [{ "type": "vcs", "url": "https://git.testdomain.local/test/bar.git" }] } 

В результате конфигурации (ов) выше я хочу получить информацию для автозагрузки следующим образом:

 $data = array( 'Foo' => $vendorDir . '/foo/bar/Framework' ); 

Если я вставляю эту строку «Foo» => … «вручную, все работает нормально. Но я не могу понять, почему эта информация не написана композитором в файле «autoload_namespaces.php».

Спасибо за любую помощь 🙂

Если вы попытаетесь установить частную библиотеку / пакет через узел «репозиториев» в composer.json вам также необходимо повторно указать узел «autoload».

 { "repositories": [{ "type": "package", "package": { "name": "foo/bar", "version": "0.0.1", "source": { "url": "git@git.testdomain.local:benjamin.carl/bar.git", "type": "git", "reference": "master" }, "autoload": { "psr-0": { "Foo": "Framework/" } } }] } 

Я просто потратил пару часов на это. Хорошая работа, композитор!

Ваш пакет foo/bar объявил include-path . Эта функция устарела и должна использоваться только для поддержки устаревшего кода, который не может быть загружен автоматически, согласно документации (см. http://getcomposer.org/doc/04-schema.md#include-path ).

Я предполагаю, что это причина, по которой ваш пакет не добавляется к автозагрузке, потому что он также может быть загружен через путь include (что плохо из-за слишком большого влияния на производительность – избегайте его любой ценой).