我有一个像这样的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 重启