1

我有一个这样的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.
4

3 回答 3

4

如果你想忽略本地系统的细节,你可以使用--ignore-platform-reqsflag。请记住,它可能会导致生产中的 lockfile 无法使用

让我们在想象的场景中展示它:

  • 您在ext-crypt本地没有,也没有在生产中。
  • 有一个cryptX
    • cryptX:1.0使用中lib-crypt-polyfillext-crypt使用 PHP 代码执行的操作)
    • 但是在cryptX:2.0他们将依赖项更改为ext-crypt.

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

于 2019-01-17T10:42:23.410 回答
0

一样容易

php composer.phar update google/apiclient 

或者您可以指定几个单独的包作为

php composer.phar update google/apiclient zircote/swagger-php rollbar/rollbar
于 2015-01-25T20:36:44.380 回答
0

也许您的机器上没有安装 PHP 扩展 mcrypt。在这里查看如何安装它http://php.net/manual/en/mcrypt.setup.php

在 Ubuntu 机器上运行:

apt-get 安装 php5-mcrypt

php5enmod mcrypt

服务 apache2 重启

于 2015-05-01T15:41:02.420 回答