Як правильно вимагати певну комісію в Composer, щоб вона була доступною для залежних пакетів?


108

У мене є бібліотека, foo/foo-libяка requiresконкретно передає GitHub:

{
    "name": "foo/foo-lib",
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/KnpLabs/Gaufrette.git"
        }
    ],
    "require": {
        "knplabs/gaufrette": "dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e"
    }
}

і це чудово працює:

$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)                                 
  - Updating knplabs/gaufrette dev-master (2633721 => 2633721)
    Checking out 2633721877cae79ad461f3ca06f3f77fb4fce02e

Generating autoload files

але коли мені потрібна ця бібліотека в іншому проекті:

{
    "name": "bar/bar-app",
    "repositories": [
        {
            "type": "vcs",
            "url": "ssh://git.example.com/foo-lib"
        }
    ],
    "require-dev": {
        "foo/foo-lib": "dev-master"
    }
}

це призводить до помилки залежності:

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for foo/foo-lib dev-master -> satisfiable by foo/foo-lib[dev-master].
    - foo/foo-lib dev-master requires knplabs/gaufrette dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e -> no matching package found.

Отже, моє запитання: як правильно requireвстановити певний комітет від GitHub у моїй бібліотеці, щоб він був доступний у залежних пакетах?


3
Майте на увазі, що вимагаючи виконання зобов'язань, композитор не буде шанувати, що виконує вимоги (cmoposer.json). Натомість він обчислює вимогу голови відділення, яка з часом змінюватиметься. Тож це може працювати деякий час, але в майбутньому зламається напевно.
estani

Відповіді:


157

Вам потрібно буде явно вимагати бібліотеку Gaufrette в цьому хеші з devпрапором як у вашій бібліотеці, так і у вашій заявці. Щось подібне повинно працювати в додатку composer.json:

{
    "name": "bar/bar-app",
    "repositories": [
        {
            "type": "vcs",
            "url": "ssh://git.example.com/foo-lib"
        }
    ],
    "require-dev": {
        "foo/foo-lib": "dev-master",
        "knplabs/gaufrette": "dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e"
    }
}

З документації :

Якщо одна з ваших залежностей має залежність від нестабільного пакету, вам потрібно також явно вимагати цього, а також прапор достатньої стабільності.

Документація також передбачає, що вам потрібно буде включити сховище для Gaufrette у свій bar/bar-appфайл Composer, хоча це здається, що це не було необхідним у цьому випадку. Я не впевнений, чому.


Я вже пробував це, теж не працює. Я думаю, це може мати щось спільне з композитором, який віддає перевагу Packagist перед GitHub?
Maciej Sz

Ні, я перевірив свої локальні сховища - це не проблема GitHub.
Maciej Sz

Я впевнений, що раніше я працював над цим. Що робити, якщо додати "minimum-stability": "dev"до bar/bar-appвимог?
Кріс

3
Це виглядає , як ви будете мати , щоб явно вимагають Gaufrette в то хеш як в вашій бібліотеці, і додатки. "Якщо одна з ваших залежностей має залежність від нестабільного пакету, вам потрібно явно вимагати цього, а також прапор достатньої стабільності." Зверніть увагу, що ви можете мати деякі пакети, наприклад, Gaufrette, при devстабільності та за замовчуванням stableдля всього іншого.
Кріс

2
Схоже, GitHub підтримує композитор поза коробкою - я щойно вилучив "url": "https://github.com/KnpLabs/Gaufrette.git"перший пакет і він все ще працює.
Maciej Sz

15

Ось як це зробити в командному рядку:

composer update knplabs/gaufrette:dev-master#2633721 --with-dependencies

Вам не доведеться використовувати весь хеш, здається, хеш-сім символів довгий. Як було сказано вище, для вашого проекту потрібно буде підтримувати розробник - на який він буде скаржитися, якщо його ще не встановлено. Також використовуйте --with-dependenciesдля отримання будь-яких залежностей тієї, яку ви оновлюєте.


0

Якщо ви вносите зміни в репозиторій Git, роздвоявшись, переконайтеся, що ви використовуєте ім'я пакета, фактично визначене у власному файлі composer.json пакету - так що, хоч я і відправив пакет до мого власного облікового запису github joshuapaling, і пакет тепер знаходився за URL-адресою https://github.com/joshuapaling/Cake-Resque.git , що зовсім не вплинуло на назву пакета, з точки зору композиторів.

Дурна помилка - але я новачок у композитора, і спочатку це було не ясно! Тож я сподіваюся, що це допоможе комусь із тією ж проблемою.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.