У меня есть два проекта на моем сервере git repo. Первая - это библиотека, которую я написал, назовем ее foo/lib-bar
. Второй - это приложение, которое использует эту библиотеку foo/app-bar
. В настоящее время библиотека находится в разрабатываемой версии, поэтому composer.json
файл библиотеки выглядит следующим образом:Как переместить зависимость композитора от require-dev, требуемого?
{
"name": "foo/lib-bar",
"description": "Bar library",
"version": "1.0.0-dev",
"type": "library",
"require": {
"php": ">=5.4",
"ext-posix": "*"
}
}
Приложение использует эту библиотеку, поэтому он содержит необходимое требование:
{
"name": "foo/app-bar",
"description": "Bar application",
"version": "0.5.0-dev",
"type": "application",
"repositories": [
{
"type": "vcs",
"url": "ssh://[email protected]/lib-foo"
}
],
"require-dev": {
"foo/lib-bar": ">=1.0.0-dev",
},
"require": {
"php": ">=5.5.3"
}
}
И все гладко до этого момента: как composer install
и composer update
перспективе, как ожидается, установить зависимость и я могу видеть его в vendor/
Теперь, the docs говорит, что
require#
Lists packages required by this package. The package will not be installed unless those requirements can be met.
И шаги, которые ведут к рассматриваемому вопросу:
Так хорошо, моя библиотека готова к развертыванию и выйти из стадии разработки. Это также требуется в производственной версии моего приложения. Я удаляю суффикс dev
из файла composer.json
моей библиотеки, фиксирую и нажимаю файл, и я готов обновить приложение.
С приложением composer.json
я двигаюсь зависимость библиотеки из require-dev
раздела require
и удалить суффикс dev
(все копии вставили, поэтому нет опечатки - я проверил и перепроверил еще раз):
"require-dev": {},
"require": {
"php": ">=5.5.3",
"foo/lib-bar": ">=1.0.0"
}
Теперь я бегу composer update
и я получаю:
$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for foo/lib-bar >=1.0.0 -> satisfiable by foo/lib-bar[dev-master].
- Removal request for foo/lib-bar == 9999999-dev
Я предполагал, это не нашел новую версию, так что я удалил старую библиотеку вручную:
$ rm composer.lock
$ rm -rf vendor/foo/
и попытался установить его с нуля
$ composer install
, но на этот раз он дает мне:
Your requirements could not be resolved to an installable set of packages.
Problem 1
- The requested package foo/lib-bar could not be found in any version, there may be a typo in the package name.
Так что похоже require-dev
делает работу, но require
не , Какие-нибудь предложения о том, что, возможно, пошло не так?
Справедливая точка: 'require-dev' не должен был быть с самого начала, но я использовал его, поскольку Composer работал только с этим. Я alos заметил, что многие библиотеки там вкладывают много вещей в 'require-dev', если они принадлежат VCS. Только зависимости, доступные в Packagist, используются в 'require', поэтому у людей может быть такая же проблема, как и у меня. Что касается тегов: я понял, что композитор будет проверять ветки, поэтому я создал ветку «1.0.0», и она все еще не работала. Я не думал о ** пометке коммитов ** - моей ошибке (или отсутствующей документации?). И я думаю, что это ** святой Грааль ** здесь. –
Удаление индикатора версии, вероятно, будет, но я ** действительно ** не хочу этого делать, потому что это то, что я хочу: указать Composer на определенную версию, которую я requrest. Композитор может обнаружить версию из репозитория, но я хочу указать, какую версию мне нужно. Разве это не цель поля версии в 'composer.json'? –
Если вы включите '' version ': "1.0.0" 'в композитор вашей библиотеки composer.json, а также пометьте это, вы создадите конфликтующую информацию для Composer. Это не противоречит, если тег также «1.0.0», но эта статическая информация в composer.json будет забыта обновить при пометке новой версии. Не используйте его, Composer отлично работает, имея только версию в теге. – Sven