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

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

Ответ 1

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

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

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

composer.phar update doctrine/doctrine-fixtures-bundle

Ответ 2

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

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.

Ответ 3

Разница между установкой, обновлением и требованием

Предположим следующий сценарий:

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

Ответ 4

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

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

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

Ответ 5

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

php composer.phar update vendor/package

Ответ 6

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

composer require {package/packagename}

лайк

composer require phpmailer/phpmailer

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

Ответ 7

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

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

Ответ 8

Вы можете использовать следующую команду для обновления любого модуля с его зависимостями

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