219

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

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,所以我不知道为什么它在那里抱怨。

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

我的作曲家.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"
}
4

5 回答 5

327
于 2013-03-05T09:03:34.950 回答
31

实际上,正确的解决方案是:

composer require vendor/package

取自Composer 的 CLI 文档

require命令将新包composer.json从当前目录添加到文件中。

php composer.phar require

添加/更改需求后,将安装或更新修改后的需求。

如果您不想以交互方式选择需求,您可以将它们传递给命令。

php composer.phar require vendor/package:2.* vendor/package2:dev-master

虽然确实会composer update安装 composer.json 中的新包,但它也会根据 composer.json中的任何模糊逻辑(>*冒号后的字符)更新 composer.lock 文件和任何已安装的包!这可以通过使用 来避免composer update vendor/package,但我不建议养成它的习惯,因为你是一个被遗忘的论点,远离一个可能被破坏的项目......</p>

保持理智并坚持composer require vendor/package添加新的依赖项!

于 2014-08-20T05:57:31.587 回答
3

我的用例更简单,只适合您的标题,但不适合您的更多细节。

也就是说,我想安装一个尚未在我的包中的新包,composer.json而不更新所有其他包。

这里的解决方案是composer require x/y

于 2014-06-09T21:50:29.290 回答
1

就我而言,我有一个回购:

  • 要求 A、B、C、D 在.json
  • 但只有 A,B,C 在.lock

与此同时,A、B、C 在生成锁时具有更新的版本。

出于某种原因,我删除了“供应商”并想做一个composer install并失败了消息:

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.

我试图从 Seldaek 运行解决方案,composer update vendorD/libraryD但 composer 坚持要更新更多的东西,所以.lock我的 git 工具也看到了太多的变化。

我使用的解决方案是:

  1. 删除所有vendors目录。
  2. 暂时VendorD/LibraryD.json.
  3. 运行composer install
  4. 然后删除文件.json并从 repo 中再次签出(相当于重新添加文件,但避免潜在的空白更改)。
  5. 然后运行 ​​Seldaek 的解决方案composer update vendorD/libraryD

它确实安装了库,但除此之外,gitdiff 向我展示了.lock仅添加了新内容而没有编辑其他内容。

(Thnx Seldaek 的指针;))

于 2014-03-29T20:14:45.763 回答
1

我们可以在不更新其他依赖项的情况下安装新包,如下所示:

 composer require package/name --no-update

这会将您的包添加到composer.json(没有更新composer.lock)

composer update package/name

这现在将安装/更新您的新包,将其添加到 composer.lock 而不更新其他部门

于 2022-01-27T12:32:49.640 回答