安装一个软件包,而无需与作曲家检查所有要求


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丢失和其他东西)。

正确的命令是什么?已尝试更新软件包,但失败:

$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.

如果要忽略本地系统的细节,可以使用--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,该版本在您的机器上不起作用,但更重要的是,它也无法在您的生产服务器上工作。

就像

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 install php5-mcrypt

php5enmod mcrypt

服务 Apache 2 重启