У меня есть проект с несколькими зависимостями, и я хотел бы установить другой, но я бы хотел, чтобы другие оставались такими же, как они. Итак, я отредактировал composer.json
, но если я запускаю composer install
, я получаю следующий вывод:
Installing dependencies from lock file
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.
Your requirements could not be resolved to an installable set of packages.
Problem 1
- laravel/framework dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.
- laravel/framework dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.
- Installation request for laravel/framework dev-master -> satisfiable by laravel/framework dev-master.
Во-первых, у меня установлен mcrypt, поэтому я не знаю, почему он жалуется на это.
Итак, как я могу установить эту новую зависимость?
Мой composer.json:
{
"require": {
"opauth/opauth": "*",
"opauth/facebook": "*",
"opauth/google": "*",
"opauth/twitter": "*",
"imagine/Imagine": "dev-develop",
"laravel/framework": "4.*",
"loic-sharma/profiler": "dev-master"
},
"autoload": {
"classmap": [
"app/libraries",
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/tests/TestCase.php"
]
},
"minimum-stability": "dev"
}
composer-php
duality_
источник
источник
Ответы:
Чтобы установить новый пакет и только это, у вас есть два варианта:
Используя
require
команду, просто запустите:Composer угадает наилучшее ограничение версии для использования, устанавливает пакет и добавляет его в
composer.lock
.Вы также можете указать явное ограничение версии, выполнив:
-ИЛИ-
Используя
update
команду, добавьте новый пакет вручнуюcomposer.json
, затем запустите:Если Composer жалуется, заявляя: «Ваши требования не могут быть разрешены для устанавливаемого набора пакетов.», Вы можете решить эту проблему, установив флаг
--with-dependencies
. Это внесет в белый список все зависимости пакета, который вы пытаетесь установить / обновить (но не ваши другие зависимости).Что касается вопросов, которые задают вопросы с Laravel и mcrypt: проверьте, правильно ли он включен в вашем CLI php.ini. Если
php -m
не перечислить mcrypt, то он отсутствует.Важно: не забудьте указать
new/package
при использованииcomposer update
! Пропуск этого аргумента приведетcomposer.lock
к обновлению всех зависимостей .источник
"new/package" : "*",
в"require"
раздел composer.json ?На самом деле, правильное решение:
composer require vendor/package
Взято из документации CLI для Composer :
Хотя верно то, что
composer update
устанавливает новые пакеты, найденные в composer.json, он также обновит файл composer.lock и все установленные пакеты в соответствии с любой нечеткой логикой (>
или*
символами после двоеточий), найденными в composer.json! Этого можно избежать, используяcomposer update vendor/package
, но я бы не советовал делать это привычкой, так как вы - один забытый аргумент от потенциально испорченного проекта ...Держите вещи в здравом уме и придерживайтесь их
composer require vendor/package
для добавления новых зависимостей! 😉источник
composer require
обновление файла composer.lock?Мой вариант использования проще и соответствует вашему названию, но не вашей дальнейшей детализации.
То есть я хочу установить новый пакет, которого пока нет в моем,
composer.json
без обновления всех остальных пакетов.Решение здесь
composer require x/y
источник
В моем случае у меня было репо с:
.json
.lock
Между тем, A, B, C имели более новые версии относительно того, когда была сгенерирована блокировка.
По какой-то причине я удалил «поставщиков» и хотел сделать,
composer install
и не удалось с сообщением:Я попытался запустить решение от Seldaek, выпустив
composer update vendorD/libraryD
но композитор настоял, чтобы обновить больше вещей, так.lock
что слишком много изменений увидели мой инструмент git.Решение, которое я использовал, было:
vendors
реж.VendorD/LibraryD
из.json
.composer install
..json
и извлеките его снова из репозитория (эквивалентно повторному добавлению файла, но во избежание возможных изменений пробелов).composer update vendorD/libraryD
Он установил библиотеку, но, кроме того,
git
diff показал мне, что.lock
только новые вещи были добавлены без редактирования других.(Спасибо Seldaek за указатель;))
источник
composer.lock
их никогда не удастся удачно удалить и восстановить..lock
это ... для блокировки! ; D - иначе файл блокировки был бы бесполезен, и вы бы его не фиксировали, или он вообще не существовал бы. Если вы работаете в компании, ориентированной на качество, перестраиваете и фиксируете блокировку, скажем, с 1000 зависимостями, все они изменятся, и люди, отвечающие за обеспечение качества, придут, чтобы убить вас, хахаха.