Установите один пакет без проверки всех требований с помощью composer

У меня есть composer.json, как это:

{
"require": {
    "symfony/yaml" : "dev-master",
    "symfony/console" : "dev-master",
    "ebuildy/ebuildy" : "dev-master",
    "keboola/php-encryption": "dev-master",
    "pear-pear.php.net/mail_mime" : "*",
    "pear-pear.php.net/http_request2" : "*",
    "pear-pear.php.net/mail_mimedecode" : "*",
    "microsoft/windowsazure": "*",
    "rollbar/rollbar": "dev-master",
    "facebook/php-sdk-v4" : "4.0.*",
    "happyr/linkedin-api-client": "dev-master",
    "zircote/swagger-php" : "dev-master",
    "google/apiclient" : "dev-master"
},
    "autoload": {
        "psr-0": {
           "bizlunch": "src/"
        }
    },
    "minimum-stability": "dev"
}

Только что добавил "google / apiclient", я хочу установить этот новый пакет без проверки требований других пакетов (потому что на моем компьютере разработчика "keboola / php-encryption" жалуется на отсутствие crypt ext и другие вещи).

Какова правильная команда? Пробовал уже обновить PACKAGE, но это не удается:

$root: php composer.phar update google/apiclient       
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
- keboola/php-encryption dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.

2 ответа

Если вы хотите игнорировать особенности вашей локальной системы, вы можете использовать --ignore-platform-reqs флаг. Имейте в виду, однако, что это может привести к непригодному для использования файлу блокировки.

Покажем это по воображаемому сценарию:

Представь, что у тебя нет ext-crypt локально и ни в производстве. Есть пакет cryptX что в версии 1 использует lib-crypt-polyfill (что делает то, что ext-crypt использует код PHP), но в версии 2 они изменили зависимость на "ext-crypt".

Теперь, если вы установите его как обычно, вы получите версию 1 (которая является единственной, отвечающей зависимостям). Но с --ignore-platform-reqs он просто работает так, как будто все, что он хочет, доступно в вашей системе. Таким образом, он с радостью устанавливает версию 2, которая не работает на вашей машине, но, более того, она не будет работать и на вашем производственном сервере.

Так же легко, как

php composer.phar update google/apiclient 

или вы можете указать несколько отдельных пакетов как

php composer.phar update google/apiclient zircote/swagger-php rollbar/rollbar

Возможно, расширение PHP mcrypt не установлено на вашем компьютере. Посмотрите, как установить его здесь http://php.net/manual/en/mcrypt.setup.php

На машине с Ubuntu запустите:

apt-get установить php5-mcrypt

php5enmod mcrypt

перезапуск службы apache2

Другие вопросы по тегам