Как потребовать форк с композитором
Вот мой composer.json, я хочу использовать Nodge's fork проекта lessphp на Github
"repositories": [{
"type": "package",
"package": {
"version": "dev-master",
"name": "nodge/lessphp",
"source": {
"url": "https://github.com/Nodge/lessphp.git",
"type": "git",
"reference": "master"
},
"autoload": {
"classmap": ["lessc.inc.php"]
}
}
}],
"require": {
"php": ">=5.3.3",
"nodge/lessphp": "dev-master"
},
Но у меня есть эта ошибка, когда я делаю обновление:
nodge / lessphp dev-master -> соответствующий пакет не найден.
Я не знаю, как правильно требовать эту вилку...
Какие-либо предложения?
6 ответов
Наиболее распространенный (и более простой) способ сделать это - использовать хранилище VCS.
Все, что вам нужно сделать, это добавить свой форк в качестве репозитория и обновить ограничение версии, чтобы оно указывало на вашу пользовательскую ветку. Ваше пользовательское имя ветки должно начинаться с префикса
dev-
,
Пример, предполагающий, что вы исправили монолог, чтобы исправить ошибку в ветке исправления ошибок:
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/igorw/monolog"
}
],
"require": {
"monolog/monolog": "dev-bugfix"
}
}
Обратите внимание, что вы не изменяете оператор require, кроме как для указания своей ветки исправления ошибок. Вы по-прежнему ссылаетесь на исходный пакет (monolog/monolog
), а не ваша личная вилка (igorw/monolog
). Вы можете прочитать подробности в документации
Использование VCS работает:
"name": "test/test",
"repositories": [{
"type": "vcs",
"url": "http://github.com/Nodge/lessphp"
}],
"require": {
"leafo/lessphp": "dev-master"
},
Но если мне потребуется модуль, который имеет это composer.json
не работает Он устанавливает оригинальный проект, а не вилку.
пример
"name": "example/example",
"require": {
"test/test": "dev-master"
},
Я должен еще раз упомянуть хранилище. Это нормально?
Если вы не можете заставить ответ @Neilime работать на вас, убедитесь, что ваш форк использует другую ветку.
Например, перенесите ваши изменения в ветку на вашей вилке под названием my-bugfix
, не добавлено dev-
префикс в имени вашей ветки, но в вашем composer.json вы должны добавить его. Ваш файл композитора будет выглядеть так:
"repositories":
[
{
"type": "vcs",
"url": "http://github.com/yourname/packageName"
}
],
"require": {
"owner/packageName": "dev-my-bugfix"
},
Я перепробовал много вариантов, но после того, как я получил этот пост, я увидел свет, и он просто отлично работал.
Вот что вам нужно сделать:
1- Форк репозиторий
2- Создайте ветку и внесите необходимые изменения.
3- Добавьте метку хранилища в ваш composer.json
"repositories": [
{
"type": "vcs",
"url": "https://github.com/user/yourforkname"
}
]
4- В командной строке внутри вашего проекта требуется ваш форк, как это:
composer require vendor/packagename:dev-branchname
И вуаля!!
У вас работает вилка
Согласно документации Composer http://getcomposer.org/doc/05-repositories.md#vcs, достаточно указать исходный репозиторий (не разветвление) в require
("nodge/lessphp" в вашем случае). Composer установит ВАШУ форк (посмотрите на код вендоров)
Итак, это 2019 год, и большинство ответов здесь уже правильные.
Однако, если вы окажетесь в ситуации, когда вам потребуется конкретная ветка вашего форка (которую вы создали), сначала попросите композитора перечислить доступные версии / теги. Это сэкономило мне много времени.
Полный пример с spatie/laravel-backup
пакет.
Сначала добавьте repositories
ключ к composer.json. С URL вашей вилки
"repositories": [{
"type": "vcs",
"url": "https://github.com/holymp2006/laravel-backup"
}]
Получить доступные версии / теги
composer show "spatie/laravel-backup" --all
Выберите версию, из которой вы хотите versions
в выводе терминала, затем потребуйте эту версию
composer require spatie/laravel-backup:v5.x-dev
Я обычно добавляю узел dist в определение пакета. У меня никогда не было проблем с этим.
Я не могу вспомнить, откуда я взял этот трюк, для каких-либо дальнейших объяснений.
{
"repositories": [
{
"type": "package",
"package": {
"version": "dev-master",
"name": "nodge/lessphp",
"source": {
"url": "https://github.com/Nodge/lessphp.git",
"type": "git",
"reference": "master"
},
"autoload": {
"classmap": ["lessc.inc.php"]
},
"dist": {
"url": "https://github.com/Nodge/lessphp/archive/master.zip",
"type": "zip"
}
}
}
],
"require": {
"nodge/lessphp": "*"
}
}
Принятый ответ и уточняющие ответы - все это хорошо сработало для меня, когда у меня был бывший. приложения, которые нуждались в I зависимости были раздвоенные и модифицированы. В этом случае я бы все равно использовал принятый ответ.
Однако, когда у меня был пакет, который я хотел распространить на Packagist, который также содержал разветвленную и измененную зависимость, этот подход больше не работал.
Если кто-то попытается установить с этой конфигурацией, он все равно получит то же самое
-> no matching package found.
сообщение об ошибке.
Этот ответ и связанные документы Composer предполагают, что настройки репо должны быть на верхнем уровне
composer.json
. Это означает, что кто-то, устанавливающий этот пакет, должен будет добавить эту конфигурацию в свой
composer.json
файл тоже, что добавляет много ненужной путаницы в процесс установки.
Вместо этого я опубликовал свою вилку в Packagist. Я понимаю, что, хотя форки не одобряются, это будет считаться поддерживаемым форком, поскольку я использую его для этого нового пакета.
Надеюсь, это будет полезно для всех, у кого есть проблема с пакетом или библиотекой, которые они хотели бы распространять.