it-roy-ru.com

Как обновить одну библиотеку с помощью 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?

246
Tool

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

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

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

composer.phar update doctrine/doctrine-fixtures-bundle
391
nifr

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

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: отключение плагинов.
  • --no-progress: Удаляет отображение хода выполнения, которое может связываться с некоторыми терминалами или сценариями, которые не обрабатывают символы возврата.
  • --optimize-autoloader (-o): преобразовать автозагрузку PSR-0/4 в карту классов, чтобы получить более быстрый автозагрузчик. Это особенно рекомендуется для производства, но для его запуска может потребоваться некоторое время, поэтому по умолчанию это не выполняется.
  • --lock: обновляет только хэш файла блокировки, чтобы исключить предупреждение об устаревании файла блокировки.
  • --with-dependencies: добавить также все зависимости пакетов из белого списка в белый список.
  • --prefer-stable: предпочитать стабильные версии зависимостей.
  • --prefer-lower: предпочитать самые низкие версии зависимостей. Полезно для тестирования минимальных версий требований, обычно используемых с --prefer-stable.
145
Yosvel Quintero

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

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

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

8
orhankutlu

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

php composer.phar update vendor/package
3
Tsounabe

Предположим, у вас есть в 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
Adam

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

composer require {package/packagename}

лайк

composer require phpmailer/phpmailer

если пакет не находится в папке vendor .. composer установите его, и если пакет существует, обновите пакет composer до последней версии.

0
Mostafa

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

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

0
The Anh