Як оновити єдину бібліотеку за допомогою Composer?


311

Мені потрібно встановити лише 1 пакет для мого розповсюдження SF2 (DoctrineFixtures).

Коли я біжу

php composer.phar update

я отримав

  - Updating twig/twig (dev-master 39d94fa => v1.13.0)
    The package has modified files:
    M CHANGELOG
    M doc/filters/batch.test
    M doc/filters/index.rst
    M doc/filters/url_encode.rst
    M doc/functions/index.rst
    M doc/tags/index.rst
    M doc/tests/index.rst
    M lib/Twig/Autoloader.php
    M lib/Twig/Compiler.php
    M lib/Twig/CompilerInterface.php
-10 more files modified, choose "v" to view the full list

Здається, останній розробник відредагував багато файлів всередині постачальника.

Для того, щоб обійти це, я спробував

php composer.phar update <package_name>

Але це, здається, не працює. Як я можу оновити / встановити лише одну бібліотеку з composer.json?


Ви використовуєте правильну команду. Чи можете ви показати нам своє composer.json?
cheesemacfly

будь ласка, спробуйте з командами, наданими у моїй відповіді, інакше, будь ласка, вкажіть опис помилки, яку ви отримаєте (тобто композитор виводить, якщо композитор скаржиться)
Nicolai Fröhlich,

Ваш composer.json може посилатися на альтернативну вилку проекту.
іконоборство

Я оновив конкретну залежність у своєму проекті laravel і вказав конкретний компонент, який слід встановити явно: оновлення композитора laravelcollective / html. Це, здавалося, спрацювало.
marko

Відповіді:


526

Щоб встановити doctrine/doctrine-fixtures-bundleверсію 2.1.*та мінімальну стабільність, @devвикористовуйте це:

composer.phar require doctrine/doctrine-fixtures-bundle:2.1.*@dev

потім оновити лише цей єдиний пакет:

composer.phar update doctrine/doctrine-fixtures-bundle

9
Може бути корисним: запуск оновлення / встановлення за допомогою -vvv (багатослівний режим: оновлення composer.phar -vvv пакет / пакунок) іноді може бути кращим, оскільки інколи з’явиться інтерактивне запит, який може бути інакше прихований
timhc22

1
А як бути, якщо в інших пакунках є помилки? (У моєму випадку встановлення припинено).
Томас Деко

2
А як же спрацьовує вимагати оновлення іншого пакета?
хакре

1
що саме ви хотіли б знати? Ви можете бути більш конкретні, будь ласка? Ви хочете дізнатися, чим може статися, що інший пакет - явно requireраніше або раніше завантажений як залежність - автоматично оновлювався при виконанні composer require <package>:<version-constraint>@<stability-flag>команди?
Ніколай Фрехліч

7
> composer.phar оновіть доктрину / doctrine-fixtures-bundle, це оновлення також і всіх інших пакетів (((
подарок

184

Якщо ви просто хочете оновити кілька пакетів, а не всіх, ви можете перелічити їх як такі:

php composer.phar update vendor/package:2.* vendor/package2:dev-master

Ви також можете використовувати символи, щоб оновлювати купу пакетів відразу:

php composer.phar update vendor/*
  • --prefer-source : Встановіть пакети, sourceколи вони доступні.
  • --prefer-dist : Встановіть пакети, distколи вони доступні.
  • --ignore-платформний-Reqs : ігнорувати php, hhvm, lib-*і ext-*вимога і змусити установку , навіть якщо локальна машина не виконує їх. Дивіться також параметр platform config .
  • --dry-run : імітуйте команду, не роблячи насправді нічого.
  • --dev : Встановіть пакунки, перелічені в require-dev(це поведінка за замовчуванням).
  • --no-dev : пропустити встановлення пакунків, перелічених у require-dev. Генерація автонавантажувачів пропускає autoload-devправила.
  • --no-autoloader : Пропускає генерацію автонавантажувача.
  • --no-script : Пропускає виконання скриптів, визначених у composer.json.
  • --no-plugins : вимикає плагіни.
  • --no-progress : Видаляє дисплей ходу, який може зіпсуватись із деякими терміналами або сценаріями, які не обробляють символи зворотної області.
  • --optimize-autoloader (-o) : Перетворіть автоматичне завантаження PSR-0/4 в classmap, щоб отримати швидший автозавантажувач. Це рекомендується особливо для виробництва, але це може зайняти небагато часу, тому це не виконується за замовчуванням.
  • --lock : Оновлює хеш файлу блокування лише для придушення попередження про застарілий файл блокування.
  • --з залежностями : Додайте також усі залежності білих пакетів у білий список.
  • - Prefer-stable : Віддавайте перевагу стабільним версіям залежностей.
  • --привірно-низький : Віддавайте перевагу найнижчим версіям залежностей. Корисно для тестування мінімальних версій вимог, як правило, з --prefer-stable.

Зверніть увагу, що користувачам ZSH може знадобитися обгортати vendor/*лапки:composer update "vendor/*"
ZeroThe2,

51

Різниця між встановленням, оновленням та потребою

Припустимо наступний сценарій:

composer.json

"parsecsv/php-parsecsv": "0.*"

файл composer.lock

  "name": "parsecsv/php-parsecsv",
            "version": "0.1.4",

Останній реліз - 1.1.0. Останній 0.*реліз -0.3.2

встановити: composer install parsecsv/php-parsecsv

Це встановить версію, 0.1.4як зазначено у файлі блокування

оновлення: composer update parsecsv/php-parsecsv

Це оновить пакет до 0.3.2. Найвища версія щодо вашого composer.json. Запис composer.lockбуде оновлено.

вимагають: composer require parsecsv/php-parsecsv

Це оновить або встановить новітню версію 1.1.0. Ваш composer.lockфайл і composer.jsonфайл також будуть оновлені.


приголомшливо, тож оновити один пакет у обмеженій версії - це composer update author/packageі тодіcomposer install author/package
Вільям Рандокун

@WilliamRandokun, якщо ви її встановили раніше, то composer update packageцього достатньо, не потрібно дзвонити інсталювати після нього
Адам

1
саме те, що я шукаю. добре пояснено. upvoted
капітан

14

Ви можете виконати наступний, щоб встановити новий пакет.

php composer.phar require

тоді термінал попросить вас ввести ім'я пакета для пошуку.

$ Search for a package []: //Your package name here

Потім термінал запитає версію пакета (Якщо ви хочете, щоб остання версія була залишена порожньою)

$ Enter the version constraint to require (or leave blank to use the latest version) []: //your version number here

Потім ви просто натискаєте клавішу повернення. Термінал попросить інший пакет, якщо ви не хочете встановити ще один, просто натисніть клавішу повернення, і ви будете готові.


6

Ви можете використовувати наступну команду для оновлення будь-якого модуля з його залежностями

composer update vendor-name/module-name --with-dependencies

5

Щоб переконатися, що композитор оновить один пакет, уже встановлений до останньої версії, у межах обмежень версії, встановлених у composer.json, видаліть пакунок від постачальника та виконайте наступні дії:

php composer.phar update vendor/package

4
Таку саму пропозицію ви знайдете в цій публікації: github.com/composer/composer/isissue/3112 . PS: Відмову від голосування без пояснень так легко зробити і так марно.
Цунабе

5

Просто використовуйте

composer require {package/packagename}

подібно до

composer require phpmailer/phpmailer

якщо пакет не знаходиться в папці постачальника .. композитор встановить його, а якщо існує пакет оновлення пакета оновлення до останньої версії.


2

Тому що ви хотіли встановити певний пакет "Мені потрібно встановити лише 1 пакет для мого розповсюдження SF2 (DoctrineFixtures)."

php composer.phar require package/package-name:package-version вистачило б

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