安装一个包而不用作曲家检查所有要求
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,它不能在你的机器上运行,而且它也不能在你的生产服务器上运行。
我有一个 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,它不能在你的机器上运行,而且它也不能在你的生产服务器上运行。