Я создаю свой первый пакет композитора. Я тестирую его, втягивая его в ванильный проект Laravel.
Проблема, с которой я сталкиваюсь, заключается в том, что когда мне требуется мой пакет композитора в основном файле Laravel composer.json, а затем я пытаюсь обновить автозагрузку.
Мой пакет composer.json:
{
"name": "cschmitz/l5-simplefm",
"description": "A Laravel 5 wrapper for Soliant Consulting's SimpleFM package.",
"require": {
"soliantconsulting/simplefm": "3.0.*"
},
"license": "MIT",
"authors": [
{
"name": "cschmitz",
"email": "[email protected]"
}
],
"minimum-stability": "dev",
"autoload": {
"psr-4": {
"L5SimpleFM\\": "src/"
}
}
}
Структура папок моего пакета в папке vendor
проекта Laravel:
Composer.json моего проекта Laravel:
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"php": ">=5.5.9",
"laravel/framework": "5.1.*",
"cschmitz/l5-simplefm": "dev" // Requiring my package here
},
...
После этого я выполнил composer dump-autoload
. Я не получаю никаких ошибок от композитора, но когда я проверяю свой файл vendor/composer/autoload_psr4.php
, мое пространство имен не отображается в массиве:
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
...
'App\\' => array($baseDir . '/app'),
// I expected to see `'L5SimpleFM\\' => array($vendorDir . '/cschmitz/L5SimpleFM/src')` as the last key of this array, but nothing shows past the App key
);
Я посмотрел в Интернете и на stackoverflow, но различные ответы и предложения, которые я нашел, не решили проблему.
Может ли кто-нибудь увидеть, что мне не хватает?
Обновлять
Согласно ответу Александру Гузински, я попытался сообщить моему проекту Laravel, что существует локальный репозиторий композитора для проверки, добавив следующий блок в файл composer.json моего проекта Laravel:
"repositories":[
{
"type": "vcs",
"url": "../cschmitz/L5SimpleFM"
}
],
Затем я переместил папку пакета, начиная с каталога cschmitz
, на тот же уровень моего проекта laravel. Структура файла теперь выглядит так:
LaravelProjectFolder/
composer.json
cschmitz/
L5SimpleFM/
composer.json
Сначала я столкнулся с ошибкой «Не найден драйвер для работы с репозиторием VCS vendor/cschmitz». Почитав немного, я обнаружил, что для использования такого локального репозитория само репо должно находиться под контролем версий (например, git, svn и т. д.). Имеет смысл. Я еще не поставил его под контроль версий, потому что это был всего лишь тестовый проект, используемый для разработки пакета.
Я создал репозиторий git в корне моего проекта Laravel и запустил composer update
. Теперь я получаю сообщение об ошибке:
[Composer\Repository\InvalidRepositoryException] Ни в одной ветке или теге ../cschmitz/L5SimpleFM не найден действительный файл composer.json, не удалось загрузить из него пакет.
Это сбивает с толку, потому что я могу ls ../cschmitz/L5SimpleFM/composer.json
видеть файл. Я также могу запустить git ls-tree -r master --name-only
и увидеть файл composer.json в локальном контроле версий репозитория:
Есть ли что-то, что помешает моему проекту Laravel увидеть файл composer.json локального репозитория?
composer install
найдет и установит его getcomposer.org/doc/ Но я ожидаю, что композитор сообщит об ошибке, что он не может найти пакет, когда вы сделалиcomposer install
. - person Michael Berkowski   schedule 18.08.2015repositories
, чтобы указать на исходный репозиторий. Я никогда не пробовал просто помещать их вvendor/
- person Michael Berkowski   schedule 18.08.2015install
. Добавьте расположение репозитория в файл composer.json, а затем запуститеcomposer update
Документация объясняет разницу - person Avalanche   schedule 18.08.2015