Как установить конкретную версию пакета с помощью Composer?

347

Я пытаюсь установить конкретную версию пакета с помощью Composer. Я попробовал composer installи , composer requireно они установить последнюю версию пакета. Что если я захочу старую версию?

gdaras
источник
прочитайте этот ответ stackoverflow.com/questions/15212381/…
KevinOrfas

Ответы:

604

composer require vendor/package:version

например:

composer require refinery29/test-util:0.10.2

alucic
источник
6
что такое функция ^ и ~ в номере версии?
Деди Ананто
2
Вы можете найти ответ здесь stackoverflow.com/a/22345808/1522019
alucic
1
@DediAnanto, пожалуйста, посмотрите на эту ссылку из пакетов npm аналогичного взаимодействия. stackoverflow.com/questions/22343224/...
okandas
110

Добавьте двойные кавычки, чтобы использовать оператор вставки в номере версии.

composer require middlewares/whoops "^0.4"
Йоанн Кергалл
источник
3
Я не вижу момента, когда вы могли бы передать имя пакета и версию как два отдельных аргумента.
x-yuri
1
@ x-
yuri Передача
Хотя технически это не «правильный» ответ на вопрос ОП, это, вероятно, более полезно для большинства людей.
Богатый суд
19

просто используйте php composer.phar require

Например :

php composer.phar require doctrine/mongodb-odm-bundle 3.0

Также доступно с установкой.

https://getcomposer.org/doc/03-cli.md#require https://getcomposer.org/doc/03-cli.md#install

Aize
источник
Для записи, добавляя собственные ограничения не доступны install- только require. Если вы надеялись переключиться на конкретную версию и зарегистрировать свой composer.lockфайл, вы можете, но вам придется использовать composer requireи затем отменить изменение на composer.jsonпотом.
mindplay.dk
Версия как отдельный аргумент? Это было когда-либо доступно?
x-yuri
10

Как уже упоминалось @alucic, используйте:

composer require vendor/package:version

или вы можете использовать:

composer update vendor/package:version

Вероятно, вам следует просмотреть этот пост StackOverflow о различиях между установкой композитора и обновлением композитора .

Относительно вопроса о номерах версий вы можете просмотреть документацию Composer по версиям , но здесь вкратце:

  • Диапазон версий тильды ( ~ ) - ~ 1.2.3 эквивалентен> = 1.2.3 < 1.3.0
  • Диапазон версий каретки ( ^ ) - ^ 1.2.3 эквивалентен> = 1.2.3 < 2.0.0

Таким образом, с Tilde вы будете получать автоматические обновления патчей, но второстепенные и основные версии обновляться не будут. Однако, если вы используете Caret, вы получите исправления и второстепенные версии, но вы не получите основные версии (с критическими изменениями).

Версия Tilde считается «более безопасным», но если вы используете надежные зависимости (хорошо поддерживаемые библиотеки), у вас не должно быть проблем с версией Caret (поскольку незначительные изменения не должны нарушать изменения.

milan.latinovic
источник
5

Предположим, вы хотите установить Laravel Collective. Это в настоящее время в версии 6.x, но вы хотите версию 5.8. Вы можете запустить следующую команду:

composer require "laravelcollective/html":"^5.8.0"

Хороший пример показан здесь в документации: https://laravelcollective.com/docs/5.5/html

Джей Лэмпстек
источник
0

В свой composer.json, вы можете положить:

{
    "require": {
        "vendor/package": "version"
    }
}

затем запустить composer installили composer updateиз каталога, содержащего composer.json. Иногда, для меня, композитор недоверчив, поэтому я начну с composer clear-cache; rm -rf vendor; rm composer.lockтого, composer installчтобы убедиться, что он получает свежие вещи.


Конечно, как показывают другие ответы, вы можете запустить следующее из терминала:

composer require vendor/package:version

И о версии:
- Официальная версия Composer статьи
- Ecosia Search

камыш
источник