Як встановити конкретну версію пакета за допомогою Composer?


345

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


є читати на цьому відповідь stackoverflow.com/questions/15212381 / ...
KevinOrfas

Відповіді:


602

composer require vendor/package:version

наприклад:

composer require refinery29/test-util:0.10.2


6
яка функція ^ і ~ у номері версії?
Деді Ананто

2
Ви можете знайти відповідь тут stackoverflow.com/a/22345808/1522019
alucic

1
@DediAnanto, будь ласка, перегляньте це посилання з npm пакетів подібної взаємодії. stackoverflow.com/questions/22343224 / ...
okandas

110

Додайте подвійні лапки, щоб використовувати оператор caret у номері версії.

composer require middlewares/whoops "^0.4"

3
Я не бачу момент, коли ви могли б передати назву пакета та версію як два окремі аргументи.
x-yuri

1
@ x-yuri передача назви пакета та версії як окремі аргументи працює для мене, використовуючи композитор 1.5.1
bryonbean

Хоча технічно це не "правильна" відповідь на питання ОП, це, мабуть, корисніше для більшості людей.
Rich Court

19

просто використовуйте php composer.phar потрібно

Наприклад :

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


Для запису, додаючи власні обмеження НЕ доступні 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 про відмінності між встановленням композитора та оновленням композитора .

Пов’язані з питаннями про номери версій, ви можете переглянути документацію композитора на версії , але коротше:

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

Отже, з Tilde ви отримаєте автоматичні оновлення виправлень, але незначні та основні версії не оновлюються. Однак якщо ви використовуєте Карет ви отримаєте виправлення та незначні версії, але ви не отримаєте основних (порушуючих змін) версій.

Версія Tilde вважається "безпечнішим" підходом, але якщо ви використовуєте надійні залежності (доглянуті бібліотеки), у вас не повинно виникнути проблем із версією Caret (оскільки незначні зміни не повинні порушувати зміни.


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

А щодо версій:
- Офіційна стаття композитора
- Пошук Ecosia

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.