Невозможно получить репозиторий композитора "путь"

У меня такая структура каталогов:

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"
}