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