Как добавить верхнюю границу требования к уже опубликованному пакету?

#php #composer-php

#php #композитор-php

Вопрос:

Учтите, что был опубликован релиз (например, версия v1.0.0) пакета PHP для packagist.org с

 {  ...  "require": {  "php": "gt;=7.0"  } }  

Есть ли ЧИСТЫЙ способ каким-то образом перенести верхнюю границу, чтобы релиз не был установлен на PHP 8 с помощью composer?

Поэтому , если я внесу следующие изменения и опубликую v1.0.1 , он не будет установлен на PHP 8 , но v1.0.0 все равно будет установлен, поскольку требование не имеет верхней границы под этим тегом.

 - "php": "gt;=7.0"   "php": "^7.0"  

Проблема с v1.0.x заключается в том, что он старый и никогда не будет поддерживать более новую версию языка. Вот почему я хотел бы разрешить установку только на PHP 7.


Единственные варианты, которые я вижу, — это хаки:

  • Либо опубликуйте новый пакет под новым именем.
  • Или удалите текущие и опубликованные теги из Packagist и git, добавьте верхнюю границу, создайте новые теги с теми же именами и опубликуйте их. Но это изменило бы историю, и нынешние потребители ссылались бы на то, что должно было существовать.

Я считаю, что это невозможно сделать чисто, но хотел бы задать вопрос, так как его еще нет.

Комментарии:

1. Что делать, если кто-то успешно использовал пакет с PHP 8 ? Вы действительно хотите предотвратить это ? Я бы сказал, просто обновите пакет с изменением требований php и добавьте в readme что-нибудь, объясняющее, что пакет не тестируется под PHP 8. Я не думаю, что есть решение для того, что вы действительно пытаетесь сделать.

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

3. Что бы я сделал, так это быстро создал новую версию вашего пакета с ограничениями на PHP 7, не более того. Возможно, короткое предупреждение в шаблоне проблемы, чтобы помнить, что PHP 8 не поддерживается. Я не думаю, что вы могли бы сделать что-то большее, кроме как разобраться с ошибкой, допущенной в версии v1.0.0 :/

Ответ №1:

Невозможно внести это изменение, не переписав историю.

Выпустите версию «исправления», которая просто изменяет поддерживаемую версию PHP. Любой, кто отправит «проблему», должен для начала обновить вашу библиотеку до последней версии.