У меня есть локальная зависимость, которая размещается на частном репозитории Gitlab. Однако, я испытываю затруднения, вставляя это в свой проект через Composer.
мой composer.json
:
"require": {
"crmpicco/GolfBundle": "dev-master"},
"repositories": [
{
"type": "package",
"package": {
"name": "crmpicco/GolfBundle",
"version": "dev-master",
"source": {
"url": "https://git.crmpicco.com/rfc1872/golfbundle.git",
"type": "git",
"reference": "master"},
"autoload": {
"psr-4": {
"crmpicco\\GolfBundle\\": ""}
}
}
}
],
Когда я смотрю в каталог поставщиков, каталоги складываются вдвое, когда я этого не ожидаю, например,
/vendor/crmpicco/GolfBundle/crmpicco/GolfBundle
Когда я бегу composer update crmpicco\GolfBundle
Я получаю следующую ошибку, когда Symfony пытается сделать кеш: clear:
Сценарий Sensio \ Bundle \ DistributionBundle \ Composer \ ScriptHandler :: clearCache, обрабатывающий событие post-update-cmd, прерванное с исключением
[RuntimeException] Произошла ошибка при выполнении команды «cache: clear —no-warmup»:PHP Fatal error: Uncaught Symfony\Component\Debug\Exception\ClassNotFoundException: Attempted
to load class "crmpiccoGolfBundle from namespace "crmpicco\GolfBundle".
Did you forget a "use" statement for "crmpicco\GolfBundle\crmpiccoGolfBundle"?
in /var/www/crmpicco/symfony/app/AppKernel.php:31
Что я пропускаю / делаю неправильно в моем composer.json
настроить?
Bundle dir структура:
/crmpicco
/GolfBundle
/Component
/DependencyInjection
crmpiccoGolfBundle.php
Bundle composer.json:
{
"name": "crmpicco/GolfBundle",
"type": "library",
"description": "A Symfony 2 bundle which provides an easy way to handle billing and subscriptions.",
"license": "MIT",
"require": {
"php": ">=7.0",
"symfony/config": "~2.8.34",
"symfony/dependency-injection": "~2.8.34",
"symfony/http-kernel": "~2.8.34",
},
"autoload": {
"psr-4": {
"crmpicco\\GolfBundle\\": ""}
},
"extra": {
"symfony-app-dir": "app",
"symfony-web-dir": "web",
"symfony-assets-install": "relative"}
}
Вы не должны использовать package
тип для репозиториев, который содержит действительный composer.json
, Этот тип был разработан для пакетов без composer.json
, поэтому этот файл будет полностью игнорироваться, так же как и обновления в вашем пакете.
В вашем случае это лучше определить как git
:
"repositories": [
{
"type": "git",
"url": "https://git.crmpicco.com/rfc1872/golfbundle.git"}
],
Хорошо. Как я вижу у тебя неправильно psr-4
Конфигурация автозагрузки в вашем комплекте composer.json
Вы должны изменить это на следующее:
"autoload": {
"psr-4": {
"crmpicco\\GolfBundle\\": "crmpicco/GolfBundle"}
}
Также, если вы не хотите дублировать каталоги, переместите содержимое вашего пакета в корневой каталог, а затем не меняйте composer.json
содержание. Dirs дублируют, потому что Composer создает структуру dir на основе name
свойство, которое также crmpicco/GolfBundle
в твоем случае.