Как переместить зависимость composer из require-dev в require?
у меня есть два проекта на моем сервере git РЕПО. Первый-это библиотека, которую я написал, назовем ее foo/lib-bar
. Второй-это приложение, которое использует эту библиотеку foo/app-bar
. В настоящее время библиотека находится в версии разработки, поэтому composer.json
файл библиотеки выглядит так:
{
"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://user@git.example.com/lib-foo"
}
],
"require-dev": {
"foo/lib-bar": ">=1.0.0-dev",
},
"require": {
"php": ">=5.5.3"
}
}
и все гладко до этого момента: обе composer install
и composer update
запуск ожидается, установите зависимость, и я вижу ее в vendor/
теперь документы говорит, что
require#
Lists packages required by this package. The package will not be installed unless those requirements can be met.
и для шагов, которые приводят к проблеме в вопросе:
Итак, моя библиотека готова к развертыванию и выходу из фазы разработки. Это также требуется в производственной версии моего приложения. Я удаляю dev
суффикс от моего библиотека, фиксации и нажмите Файл, и я готов обновить приложение.
С приложением composer.json
я перемещаю зависимость библиотеки из до 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
не. Есть предположения, что здесь могло пойти не так?
1 ответов
require-dev
не место для разработки зависимостей. Он предназначен для программного обеспечения, которое используется только в разработке, например PHPUnit, Mockery и т. д., или для зависимостей, которые полезны сами по себе, но в этом случае используются только для разработки, например, клиентская библиотека для службы, о которой идет пакет программного обеспечения (чтобы сделать некоторые реальные запросы в тестовом сценарии).
таким образом, ваша библиотека не должна была быть "require-dev" с самого начала.
другое дело: композитор будет вычесть версию, если используйте соответствующие ветви и теги, т. е. ветвь с именем " 1.0.x " в вашем репозитории будет обнаружен как ветвь разработки для всех версий 1.0, и любые требования к таким версиям могут быть удовлетворены этой ветвью-при условии, что вы разрешите версии разработки либо установив "minimum-stability": "dev"
(что позволит версии разработки для всех программ-довольно непреднамеренно), или когда вам требуется версия "1.0.0@dev"
для вашего программное обеспечение.
единственное, что может в настоящее время сломать вашу настройку композитора, - это то, что вы упоминаете версию в librarys composer.JSON явно, и это версия разработки. Вы удалили этот индикатор версии? Вы должны удалить его, потому что жизнь проще, если Composer может обнаружить версии из тегов в репозитории, а не путем их явного упоминания в composer.формат JSON.
наконец, пожалуйста, убедитесь, что при использовании Git вы тег commit С нужную версию. The require
версия d должна соответствовать версии с тегами git.