Composer:如何在不更新旧依赖项的情况下安装另一个依赖项?新旧、情况下、如何在、Composer

2023-09-06 15:40:08 作者:念

我有一个项目有几个依赖项,我想安装另一个,但我想保持其他的原样.所以我编辑了 composer.json,但是如果我运行 composer install,我会得到以下输出:

I have a project with a few dependencies and I'd like to install another one, but I'd like to keep the others the way they are. So I've edited the composer.json, but if I run composer install, I get the following output:

Installing dependencies from lock file
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.
Your requirements could not be resolved to an installable set of packages.

Problem 1
    - laravel/framework dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.
    - laravel/framework dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.
    - Installation request for laravel/framework dev-master -> satisfiable by laravel/framework dev-master.

首先,我确实安装了 mcrypt,所以我不知道为什么它在那里抱怨.

First of all, I do have mcrypt installed, so I don't know why it's complaining about that there.

那么,我该如何安装这个新的依赖呢?

So, how can I install this new dependency?

我的 composer.json:

{
    "require": {

        "opauth/opauth": "*",
        "opauth/facebook": "*",
        "opauth/google": "*",
        "opauth/twitter": "*",

        "imagine/Imagine": "dev-develop",

        "laravel/framework": "4.*",
        "loic-sharma/profiler": "dev-master"
    },
    "autoload": {
        "classmap": [
            "app/libraries",
            "app/commands",
            "app/controllers",
            "app/models",
            "app/database/migrations",
            "app/tests/TestCase.php"
        ]
    },
    "minimum-stability": "dev"
}

推荐答案

要安装一个新包,只有那个,你有两个选择:

To install a new package and only that, you have two options:

使用 require 命令,只需运行:

Using the require command, just run:

composer require new/package

Composer 将猜测要使用的最佳版本约束,安装包,并将其添加到 composer.lock.

Composer will guess the best version constraint to use, install the package, and add it to composer.lock.

您还可以通过运行指定显式版本约束:

You can also specify an explicit version constraint by running:

composer require new/package ~2.5

-或-

Nodejs Express1安装入门与模版引擎ejs

使用 update 命令,手动将新包添加到composer.json,然后运行:

composer update new/package

如果 Composer 抱怨说您的需求无法解析为一组可安装的软件包.",您可以通过传递标志 --with-dependencies 来解决此问题.这会将您尝试安装/更新的软件包的所有依赖项列入白名单(但没有其他依赖项).

If Composer complains, stating "Your requirements could not be resolved to an installable set of packages.", you can resolve this by passing the flag --with-dependencies. This will whitelist all dependencies of the package you are trying to install/update (but none of your other dependencies).

关于提问者对 Laravel 和 mcrypt 的问题:检查它是否在 CLI php.ini 中正确启用.如果 php -m 没有列出 mcrypt 那么它就丢失了.

Regarding the question asker's issues with Laravel and mcrypt: check that it's properly enabled in your CLI php.ini. If php -m doesn't list mcrypt then it's missing.

重要提示:在使用composer update时不要忘记指定new/package!省略该参数将导致所有依赖项以及 composer.lock 被更新.

Important: Don't forget to specify new/package when using composer update! Omitting that argument will cause all dependencies, as well as composer.lock, to be updated.