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

224

Мне нужно установить только 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?

  • 0
    Вы используете правильную команду. Можете ли вы показать нам свой composer.json ?
  • 0
    пожалуйста, попробуйте с командами, приведенными в моем ответе, в противном случае, пожалуйста, предоставьте описание ошибки, которую вы получите (т.е. вывод композитора, если композитор жалуется)
Показать ещё 2 комментария
Теги:
composer-php

7 ответов

394
Лучший ответ

Для установки doctrine/doctrine-fixtures-bundle с версией 2.1.* и минимальной стабильностью @dev используйте это:

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

затем обновить только этот пакет:

composer.phar update doctrine/doctrine-fixtures-bundle
  • 6
    Может быть полезно: запуск обновления / установки с -vvv (подробный режим: composer.phar update -vvv package / package) иногда может быть лучше, так как иногда появляется интерактивное приглашение, которое в противном случае может быть скрыто
  • 0
    Что делать, если в других пакетах есть ошибки? (В моем случае установка остановлена).
Показать ещё 8 комментариев
131

Если вы просто хотите обновить несколько пакетов и не все, вы можете перечислить их как таковые:

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

Вы также можете использовать подстановочные знаки для одновременного обновления пакета пакетов:

php composer.phar update vendor/*
  • - prefer-source. Установите пакеты из source, если они доступны.
  • - prefer-dist. Установите пакеты из dist, если они доступны.
  • - ignore-platform-reqs: игнорировать php, hhvm, lib-* и ext-* требования и принудительно установить, даже если локальная машина не выполняет их. См. Также параметр platform .
  • - dry-run: Имитировать команду, фактически ничего не делая.
  • - dev: установите пакеты, перечисленные в require-dev (это поведение по умолчанию).
  • - no-dev. Пропустите пакеты, перечисленные в require-dev. Генерация автозагрузчика пропускает правила autoload-dev.
  • - no-autoloader: пропускает генерацию автозагрузчика.
  • - no-scripts: пропускает выполнение скриптов, определенных в composer.json.
  • - no-plugins: отключает плагины.
  • - отсутствие прогресса: удаляет индикатор прогресса, который может испортиться с некоторыми терминалами или скриптами, которые не обрабатывают обратные символы.
  • - optimize-autoloader (-o). Преобразуйте автозагрузку PSR-0/4 в classmap, чтобы получить более быстрый автозагрузчик. Это рекомендуется специально для производства, но может потребоваться немного времени для запуска, поэтому в настоящее время он не выполняется по умолчанию.
  • - блокировка: только обновляет хэш файл блокировки, чтобы подавить предупреждение о том, что файл блокировки устарел.
  • - с зависимостями: добавьте также все зависимости белых списков к белому списку.
  • - предпочитает-стабильный. Предпочитает стабильные версии зависимостей.
  • - prefer-low. Предпочитают наименьшие версии зависимостей. Полезно для тестирования минимальных версий требований, обычно используемых с --prefer-stable.
6

В основном вы можете выполнить следующий, чтобы установить новый пакет.

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

Затем вы просто нажимаете клавишу возврата. Терминал запросит другой пакет, если вы не хотите устанавливать другой, просто нажмите клавишу возврата, и вы будете готовы.

3

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

php composer.phar update vendor/package
  • 4
    Вы найдете то же самое предложение в этом посте: github.com/composer/composer/issues/3112 . PS: Голосовать без объяснения причин так легко и бесполезно.
0

Предположим, у вас есть в composer.json "parsecsv/php-parsecsv": "0.*", и в вашем файле composer.lock

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

Последний выпуск 0.* - 0.3.2 а последний - 1.1.0.

Это то, что происходит со следующими командами:

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 также будут обновлены.

0

Поскольку вы хотели установить конкретный пакет "Мне нужно установить только 1 пакет для моего дистрибутива SF2 (DoctrineFixtures)".

php composer.phar require package/package-name:package-version будет достаточно

0

Просто используйте

composer require {package/packagename}

лайк

composer require phpmailer/phpmailer

если пакет не находится в папке поставщика. Композитор устанавливает его и если пакет содержит пакет обновления композитора для последней версии.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню