2015-08-17 2 views
6

Можно ли сказать композитору установить зависимость только при использовании указанных версий PHP?Зависимость от композитора для указанной версии PHP

Причина: моя библиотека использует функцию password_hash, которая доступна в версии 5.5+, и есть библиотека совместимости ircmaxell/password-compat для PHP 5.4. Однако установка этой библиотеки на PHP 5.5+ совершенно бессмысленна. Итак, можно ли сказать композитору установить ircmaxell/password-compat только при запуске на версиях < 5.5?

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

IF php version < 5.5: 
    install ircmaxell/password-compat 
ELSE: 
    skip ircmaxell/password-compat 

Заранее спасибо.

P.S. Пожалуйста, публикуйте только прямые ответы, как это сделать, а не обходные решения или рекомендации по снижению поддержки 5.4. Я также могу придумать их, я ищу здесь умное решение :)

+0

Да, посмотрите на это http://odino.org/managing-php-dependencies-with-composer/ – RiggsFolly

+0

Я думаю, что ваш лучший выбор - посмотреть [скрипты] (https://getcomposer.org/doc /articles/scripts.md) и работать с этим. – vascowhite

+0

@RiggsFolly Может быть, мне что-то не хватает, но я не могу найти что-либо в этой статье, которая отвечает на вопрос OP? – vascowhite

ответ

3

Короткий ответ: «Это невозможно».

Зависимость не является массовой. Почему бы просто не установить его в любом случае? Если вы находитесь на PHP 5.5, все еще будут использоваться встроенные функции пароля.

Вы также можете сделать password-compat необязательной зависимостью (suggests). Проблема в том, что разработчик должен установить его вместе с вашим приложением.

Наконец, вы можете сделать вторичный виртуальный пакет. Скажите, что ваш пакет называется «Acme». Можно было бы создать дополнительный пакет «Acme-php54», который зависит от как от password_compat, так и от вашего основного проекта. Это задерживает зависимость вне вашего проекта, но я бы сказал, что самым простым является просто установить его, пока вы намереваетесь поддерживать PHP 5.4, и просто отбросьте PHP 5.4 через некоторое время, когда это будет EOL.

+0

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

+0

Сделано несколько изменений с несколькими мыслями. – Evert

+0

Ну, спасибо за больше мыслей :), но 1) сделать его необязательной зависимостью не очень приятно, нужно, чтобы конечный пользователь думал, усложняет сборку travis. 2) создание вторичного пакета не решает проблему, логика решения, если его установить или нет, все еще отсутствует. 3) Мне любопытно, если это вообще возможно, да, я также могу придумать много подобных обходных решений :) – amik

2

Да, это возможно.

Рассмотрите наличие одной ветви, например. 1.x для версий устаревших PHP, как

{ 
    "name": "some/library", 
    "version": "1.0.0", 
    "require": { 
     "ircmaxell/password-compat": "*" 
    } 
} 

и 2.x отрасль для 5.5+

{ 
    "name": "some/library", 
    "version": "2.0.0", 
    "require": { 
     "php": ">=5.5" 
    } 
} 

Таким образом, требования рыхлых версий, т.е. some/library:* будет решать соответствующие версии.

Другой способ поручить пользователям добавлять

"replace": { 
    "ircmaxell/password-compat": "*" 
} 

сами по себе, если это необходимо.

Обратите внимание, что некоторые пользователи (включая меня) могут менять свой интерпретатор php «на лету» и не будут слишком счастливы отладить такие автоматические проблемы.

+0

Ну, спасибо, это выглядит как самый близкий подход, однако мне тоже не нравится этот вид автомата, поэтому я не буду этого делать, если это невозможно сделать в чистом виде. – amik

Смежные вопросы