У меня проблемы с правильной установкой проекта с помощью композитора. У меня есть собственный пользовательский пакет (библиотека), размещенный в не публичном 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 (что плохо из-за слишком большого влияния на производительность – избегайте его любой ценой).