安装一个包而不用作曲家检查所有要求

Install one package without checking all requirements with 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.

就像

一样简单
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 重启

如果您想忽略本地系统的细节,您可以使用 --ignore-platform-reqs 标志。请记住,它 可能会导致生产中的锁定文件无法使用

让我们想象一下:

  • 您在本地没有 ext-crypt,也没有在生产中。
  • 有包 cryptX
    • cryptX:1.0 中使用 lib-crypt-polyfill(这就是 ext-crypt 使用 PHP 代码所做的)
    • 但在 cryptX:2.0 中,他们将依赖项更改为 ext-crypt

现在,如果您要正常安装它,您将获得版本 1(这是唯一满足依赖关系的版本)。但是使用 --ignore-platform-reqs 它就好像它想要的任何东西在你的系统中都可用一样。所以它很乐意安装版本 2,它不能在你的机器上运行,而且它也不能在你的生产服务器上运行。