Intereting Posts
Artisan: Не удалось найти драйвер Лучший способ распознать файл в php Каковы плюсы и минусы различных типов полей даты и времени в MySQL? Подключить автономный скрипт к joomla DB с помощью фреймворка Как получить результат из строки MySQL с несколькими столбцами с одинаковым именем с PHP? как вы обнаруживаете, пришел ли ваш посетитель сайта из результатов поиска Google? Загрузить в Chrome возвратите Aw, Snap-страницу Файлы cookie, не работающие на разных страницах Laravel 5.2 Пробный тест загрузки загруженного файла Скрытие категории корней и отображение подкатегорий в качестве меню Запуск PHP: база данных Timezone повреждена Удаление элемента из панели навигации администратора Magento Как искать несколько терминов в нескольких столбцах таблицы? Список разделенных запятой MYSQL, можно добавлять и удалять значения? Преобразование строки даты в UTC с помощью PHP

Композитор: удалите пакет, очистите зависимости, не обновляйте другие пакеты

Ситуация

Предположим, у меня есть проект с двумя пакетами, установленными Composer:

php composer.phar require 'squizlabs/php_codesniffer:~2.0' 'phpmd/phpmd:~2.1' 

Автогенерированный файл composer.json выглядит следующим образом:

 { "require": { "squizlabs/php_codesniffer": "~2.0", "phpmd/phpmd": "~2.1" } } 

В автогенерированном файле composer.lock есть два запрошенных пакета:

  • 2.0.0 squizlabs/php_codesniffer
  • 2.1.3 phpmd/phpmd

а также четыре зависимости phpmd/phpmd :

  • 2.0.4 pdepend/pdepend
  • 2.5.9 symfony/config
  • 2.5.9 symfony/dependency-injection
  • 2.5.9 symfony/filesystem

Через несколько дней squizlabs/php_codesniffer версия squizlabs/php_codesniffer версии 2.1.0 , но я еще не хочу запускать update . Я хочу остаться на версии 2.0.0 , и, возможно, через несколько дней я запустил update .


Вопрос

Теперь я хочу удалить phpmd/phpmd из моего проекта. Я хочу достичь следующих целей:

  1. Удалить phpmd/phpmd от composer.json
  2. Удалить phpmd/phpmd из composer.lock
  3. Удалить phpmd/phpmd из папки vendor
  4. Удалите все зависимости phpmd/phpmd от composer.lock
  5. Удалите все зависимости phpmd/phpmd от папки vendor
  6. Не обновлять squizlabs/php_codesniffer до версии 2.1.0

Редактировать: я бы предпочел решение, которое не требует изменения ограничения версии squizlabs/php_codesniffer в composer.json


Что я пробовал

Если я запустил:

 php composer.phar remove phpmd/phpmd 

это достигает точек 1, 2, 3, 6 , но не достигает точек 4, 5 .

Зависимости phpmd/phpmd сохраняются в phpmd/phpmd composer.lock и папке vendor .

Если я запустил:

 php composer.phar remove phpmd/phpmd php composer.phar update 

это достигает точек 1, 2, 3, 4, 5 , но не достигает точки 6 .

squizlabs/php_codesniffer обновляется до версии 2.1.0 .

Удалите запись из composer.json затем запустите composer update phpmd/phpmd .

Что касается того, почему это решение работает. Я понятия не имею, но это то, что требуется, чтобы полностью удалить пакет из composer.lock и /vendor и позволить вам установить новый / заменяющий / конфликтующий пакет.

Сделай это:

 php composer.phar remove phpmd/phpmd 

Измените файл composer.json, чтобы он содержал следующий раздел require.

 { "require": { "squizlabs/php_codesniffer": "2.0.*", } } 

Теперь запустите composer.phar update . Это должно заставить вас, где вы хотите быть.

Примечание. Вы также можете привязать пакет php_codesniffer к определенной версии, например 2.0.0 . Более подробную информацию о том, как композитор выполняет управление версиями, можно найти здесь .

В настоящее время я не считаю это возможным. Это то, что вы можете пожелать передать в качестве запроса функции Composer.

Между тем, я думаю, ваш лучший выбор – пойти с вариантом №1: php composer.phar remove phpmd/phpmd

Он удалит пакет из ваших явных зависимостей, не заставляя вас ничего обновлять. Устаревшие зависимости из вашей удаленной библиотеки останутся до тех пор, пока вы не выполните следующее composer update , которое в любом случае вы должны делать периодически. Большинство файлов из старых зависимостей должны быть настроены на автозагрузку так или иначе, поэтому у вас не должно быть никаких реальных штрафов за сохранение этих файлов, кроме места, которое они используют на диске.