Невозможно получить репозиторий композитора "путь"
У меня такая структура каталогов:
composer.json < Main
packages/
balunker/
testpackage/
composer.json < Package
src/
TestPackage.php
Основной composer.json
выглядит следующим образом:
{
"name": "vagrant/composer-test",
"repositories": [
{
"type": "path",
"url": "packages/*/*"
}
],
"require": {
"balunker/testpackage": "*"
}
}
Пока пакет composer.json
выглядит так:
{
"name": "balunker/testpackage",
"autoload": {
"psr-4": {
"Balunker\\": "src/"
}
}
}
Вкл composer update
Я просто получаю сообщение о том, что пакет не может быть разрешен. Символьные ссылки не создаются и пакет не устанавливается. Я буквально потратил половину своего времени на то, чтобы понять это без каких-либо успехов.
Я также добавил подробный вывод composer update -vvv
: http://pastebin.com/mMRHsACk.
Моя композиторская версия является последней (с 20 апреля 2016 года в 2:39 UTC), и все это работает внутри Vagrant (Debian).
ЛЮБАЯ рекомендация отсюда очень ценится. Я действительно не знаю, что еще делать.
Ответы
Ответ 1
Я также опубликовал вопрос о Github, и выяснилось, что документация немного вводит в заблуждение. В нем говорится:
{
"repositories": [
{
"type": "path",
"url": "../../packages/my-package"
}
],
"require": {
"my/package": "*"
}
}
Однако, если у вас есть только локальное репо без релизов, вы должны использовать:
{
"repositories": [
{
"type": "path",
"url": "../../packages/my-package"
}
],
"require": {
"my/package": "dev-master"
}
}
Версия dev-master
- это ключ здесь (учитывая, что вы работаете над главной ветвью). Это было мягко бесит, но, благодаря некоторым полезным композиторам, я наконец смог схватить это.
Я надеюсь, что это может помочь кому-то в будущем.
Удачи!
Ответ 2
То, что работало для меня, было очень похоже на вышесказанное, но я должен был специально ориентироваться на ветку, в которой я развивался.
Предполагается, что код в каталоге /newapp находится на том же уровне, что и /app, и ветка с именем feature/the-new-package:
"repositories": [
{
"type": "path",
"url": "newapp"
}
],
"require": {
"package/newapp": "dev-feature/the-new-package"
},
\ * не работал, как и dev-master. Это должен был быть пакет dev-feature/the-new-package.
Ответ 3
Для будущих пользователей Google добавьте свою версию в composer.json
, а затем запросите пакет с опцией --prefer-source
.
Например: composer require your-vendor/package:1.0.* --prefer-source
Ответ 4
Что помогло мне разобраться, так это composer clear-cache
, а затем запустить composer update
.
Объяснение: Первоначально я пытался composer install my/package
, который не удался на зависимых версиях. Поэтому мне нужно было сделать некоторые локальные модификации, чтобы он работал с Laravel 6.0. Тем не менее, он продолжал проверять неправильную версию пакетов Laravel, что заставило меня поверить, что он не видит мой локальный репозиторий, который я установил в ключе repositories
с помощью "type": "path"
. Сначала я убедился, что путь существует, и я был на правильной ветке (master
, поэтому я использую dev-master
в моем composer.json
). Как только я очистил кэш компоновщика и запустил обновление, оно обновлялось по моему локальному пути без проблем с зависимостями.
"repositories": [
{
"type": "path",
"url": "../libs/package-name"
}
],
"require-dev": {
"pkg-maintainer/package-name": "dev-master"
}