如何解决Composer:如何在不更新旧依赖项的情况下安装另一个依赖项?
要安装一个新的包,只有那个,你有两个选择:
- 使用
require
命令,只需运行:composer require new/package
Composer 将猜测要使用的最佳版本约束,安装包,并将其添加到composer.lock
.
您还可以通过运行指定显式版本约束:
composer require new/package ~2.5
“揙R”
- 使用该
update
命令,手动将新包添加到composer.json
,然后运行:composer update new/package
如果 Composer 抱怨说“您的需求无法解析为一组可安装的软件包。”,您可以通过传递 flag 来解决此问题--with-
dependencies
。这会将您尝试安装/更新的软件包的所有依赖项列入白名单(但没有其他依赖项)。
关于提问者对 Laravel 和 mcrypt 的问题:检查它是否在 CLI php.ini 中正确启用。如果php -m
没有列出
mcrypt,那么它就丢失了。
new/package
使用时不要忘记指定composer
update
!省略该参数将导致所有依赖项以及composer.lock
被更新。
解决方法
我有一个具有一些依赖项的项目,我想安装另一个,但我想保持其他项目的原样。所以我编辑了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"
}