我有一个带有一些依赖项目的项目,我想安装另一个项目,但我想保持其他人的方式。所以我编辑了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,所以我不知道为什么会抱怨它。
那么,我该如何安装这个新的依赖?
我的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"
}
答案 0 :(得分:262)
要安装新软件包,只有这个,您有两个选择:
使用require
命令,运行:
composer require new/package
Composer会猜测要使用的最佳版本约束,安装软件包并将其添加到composer.lock
。
您还可以通过运行:
指定显式版本约束composer require new/package ~2.5
-OR -
使用update
命令,手动将新包添加到composer.json
,然后运行:
composer update new/package
如果Composer抱怨说“您的要求无法解析为可安装的软件包。”,您可以通过传递标记--with-dependencies
来解决此问题。这会将您尝试安装/更新的软件包的所有依赖项列入白名单(但不包括其他依赖项)。
关于提问者与Laravel和mcrypt的问题:检查它是否在您的CLI php.ini中正确启用。如果php -m
没有列出mcrypt,那么它就会丢失。
重要提示: 使用new/package
时请不要忘记指定composer update
!省略该参数将导致更新所有依赖项以及composer.lock
。
答案 1 :(得分:29)
实际上,正确的解决方案是:
composer require vendor/package
取自CLI documentation for Composer:
require
命令将新包添加到当前目录的composer.json
文件中。
php composer.phar require
添加/更改要求后,将安装或更新修改后的要求。
如果您不想以交互方式选择要求,可以将它们传递给命令。
php composer.phar require vendor/package:2.* vendor/package2:dev-master
虽然composer update
确实安装了在composer.json中找到的新软件包, 但它也会更新composer.lock文件和任何已安装的软件包 < em>根据composer.json中的任何模糊逻辑(冒号后的>
或*
个字符)!这可以通过使用composer update vendor/package
来避免,但我不会建议养成它的习惯,因为你是一个被遗忘的争论,远离可能破坏的项目......
保持理智并坚持使用composer require vendor/package
添加新的依赖项!
答案 2 :(得分:2)
我的用例更简单,只适合您的标题,但不适合您的进一步细节。
也就是说,我想在没有更新所有其他软件包的情况下安装尚未在composer.json
中的新软件包。
此处的解决方案是composer require x/y
答案 3 :(得分:0)
在我的情况下,我有一个回购:
.json
.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
但作曲家坚持要更新更多内容,因此.lock
看到我的git工具时发生了太大的变化。
我使用的解决方案是:
vendors
目录。VendorD/LibraryD
。.json
composer install
。.json
并从repo再次签出(相当于重新添加文件,但避免了潜在的空格更改)。composer update vendorD/libraryD
它确实安装了库,但另外,git
diff告诉我,在.lock
中只添加了新内容而不编辑其他内容。
(Thnx Seldaek指针;))