Частные комплекты композиторов - не найдено никакого действительного композитора .json
Я пытаюсь загрузить библиотеку, которую я разместил на BitBucket, используя композитор, как описано в официальной документации и здесь, но продолжайте получать следующую ошибку:
[Composer\Repository\InvalidRepositoryException]
No valid composer.json was found in any branch or tag of [repository URL], could not load a package from it.
Вот мой проект composer.json:
{
"name": "Project name",
"require": {
"my-vendor/my-package": "dev-master"
},
"repositories": [
{
"type": "vcs",
"url": [repository URL]
}
]
}
И вот композитор .json в моем удаленном репозитории (который, по-видимому, не может быть найден):
{
"name": "my-vendor/my-package",
"version": "0.3",
"autoload": {
"psr-0": {
"NS_": "src"
}
}
}
Я должен упомянуть, что оба файла composer.json находятся в корневом каталоге, как и должно быть.
Некоторые другие примечания:
Я также пробовал подход "не-композитор", в котором я указываю информацию о пакете в моем проекте composer.json и опускаю композитор .json из моего удаленного репозитория, как описано в документация. Это успешно клонирует основную ветвь, но затем приводит к следующей ошибке:
[RuntimeException]
Failed to execute git checkout "master" && git reset --hard "master"
fatal: Not a git repository (or any of the parent directories): .git
Однако пакет загружается в /vendor, как и ожидалось, поэтому я не уверен, почему он снова пытается проверить мастер.
Это не так, как я хочу решить эту проблему (поскольку я предпочел бы использовать композитор .json в удаленном репозитории), но это может помочь выявить проблему в другом месте.
Спасибо за любую помощь.
ИЗМЕНИТЬ
Мне удалось заставить его работать, ссылаясь на package.json через HTTP:
"repositories": [
{
"type": "composer",
"url": "http://localhost/packages.json"
}
]
Package.json выглядит так:
{
"packages": {
"vendor/my-package": {
"dev-master": {
"name": "vendor/my-package",
"version": "dev-master",
"source": {
"url": [repository URL],
"type": "git",
"reference": "master"
}
}
}
}
}
Это единственный способ заставить это работать? Кажется, немного переборщить, чтобы разместить мой собственный файл packages.json, если я только собираюсь использовать один или два внутренних пакета.
Несмотря на это, это дает мне ту же ошибку Git, как я упоминал ранее.
РЕДАКТИРОВАТЬ 2
Принудительная ошибка (неверная кодовая фраза SSH) дает следующее:
[RuntimeException]
Failed to execute git clone "[repository URL]" "C:\workspace\DFv3\vendor\vendor/my-package" && cd /D "C:\workspace\DFv3\vendor\vendor/my-package" && git remote add composer "[repository URL]" && git fetch composer
Итак, я ясно вижу, что он здесь делает. Однако, кажется, после этой команды он запускает его cd
в каталог .git
и пытается запустить:
git checkout "master" && git reset --hard "master"
Предположительно, чтобы избавиться от экземпляра композитора, он потянул. Однако это работает в неправильном каталоге, и я не могу понять, почему..
Ответы
Ответ 1
Мне удалось заставить его работать, ссылаясь на package.json
по HTTP:
"repositories": [
{
"type": "composer",
"url": "http://localhost/packages.json"
}
]
поэтому файл packages.json
выглядит следующим образом:
{
"packages": {
"vendor/my-package": {
"dev-master": {
"name": "vendor/my-package",
"version": "dev-master",
"source": {
"url": [repository URL],
"type": "git",
"reference": "master"
}
}
}
}
}
Кроме того, кажется, что запись реестра автозапуска, которую я имел для командной строки, мешала работе композитора.
Смотрите: Требование частного git репозитория Bitbucket не может найти действительный composer.json.
Ответ 2
Вы не должны включать спецификацию version
в свою библиотеку composer.json, если она фактически управляется поддерживаемой системой управления версиями. В настоящее время вы говорите, что ваша главная ветвь IS версии 0.3 (которая является стабильной версией), но вы пытаетесь включить "dev-master" (который является нестабильной версией). Композитор может запутаться, если это программное обеспечение действительно является "dev-master" или "version 0.3".
Если вы действительно разрабатываете новые версии для серии 0.3.x в своей основной ветке, вместо этого вы должны определить псевдоним ветки. Добавьте это в свою текущую ветку развития для версий 0.3.x:
"extra": {
"branch-alias": {
"dev-master": "0.3.x-dev"
}
}
Если вы хотите перейти к версии 0.4 или 1.0, вы должны перейти в "последнее" состояние серии 0.3 с ветвью с именем "0,3", а затем обновить композитор .json в главной ветке до point dev-master к новому псевдониму (например, "dev-master": "0.4.x-dev"
). Вы также можете назвать свою ветку 0.3 в любом случае, а затем добавить псевдоним для ветки THAT.
Это позволит вам потребовать последнюю версию версии 0.3.x следующим образом:
"require": {
"my-vendor/my-package": "0.3.*@dev"
}
Это приведет к последней версии версии 0.3, которая в настоящее время будет последней фиксацией в главной ветки из-за определенного псевдонима.
То, как вы в настоящее время настроены, заставляет вас явно включать версию 0.3, которая является движущейся целью, не делая этот факт явно известным.
Предоставление явного тега версии должно выполняться только в том случае, если нет доступной системы контроля версий, которая может предоставить Composer номер версии, т.е. нет доступных тегов, или теги не соответствуют требованию Composer для номеров версий. Поскольку вы, похоже, контролируете этот vcs, вероятно, рекомендуется создать теги в соответствии со стандартом Composers вместо того, чтобы затруднить выпуск новой версии.
После того, как вы исправили это, я ожидаю, что ваша установка НЕ потребует этот файл package.json, потому что этот файл теперь исправляет проблемы, которые вы создали с помощью объявления этой версии. Вам также не понадобится эта ссылка для композитора, но она может вернуться к упоминанию исходного репозитория, как вы.
Если вы чувствуете, что используете слишком много частных репозиториев, для которых требуется больше частных репозиториев, и вам не стоит упоминать их все в длинном списке, вы можете подумать об использовании Satis, чтобы создать такой список найденных пакетов, а не вручную создавать их.
Ответ 3
У меня была такая же ошибка, после удаления папок из vcs все работает отлично
sudo rm -R ~/.composer/cache/vcs/*
В Windows (как предложено @Serbu):
Очистка директорий vcs, repo и файлов в C:\Users\Me\AppData\Local\Composer\
Ответ 4
Я знаю, что это немного устарело, но для тех, кто может столкнуться с этой проблемой, вот как это работает для меня.
Очистите кеш композитора.
composer clearcache
Повторите попытку сборки script.