composer php:我怎样才能安装另一个依赖项,而不更新旧的?
我有一个项目有一些依赖,我想安装另一个,但我想保持其他人的方式。 所以我编辑了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" }
要安装一个新的软件包,只有这个,你有两个select:
-
使用
require
命令,运行:composer require new/package
composer php会猜测使用的最佳版本约束,安装软件包并将其添加到
composer.lock
。您还可以运行以下命令来指定明确的版本约束:
composer require new/package ~2.5
-要么-
-
使用
update
命令,手动添加新的包到composer.json
,然后运行:composer update new/package
如果Composer抱怨说明“您的需求无法parsing为一套可安装的软件包”,您可以通过传递标志--with-dependencies
来解决此问题。 这将白名单您试图安装/更新(但没有其他依赖关系)的包的所有依赖项。
关于Laravel和mcrypt的问题提出者的问题:检查它是否正确启用您的CLI php.ini。 如果php -m
没有列出mcrypt,那么它就会丢失。
重要:使用composer update
时不要忘记指定new/package
! 省略这个参数将会导致所有的依赖关系以及composer.lock
被更新。
其实,正确的解决办法是:
composer require vendor/package
从Composer的CLI文档中获取 :
require
命令将新包添加到当前目录下的composer.json
文件中。
php composer.phar require
添加/更改要求后,修改的要求将被安装或更新。
如果您不想以交互方式select需求,则可以将它们传递给命令。
php composer.phar require vendor/package:2.* vendor/package2:dev-master
虽然composer update
安装了composer update
新软件包, 但它也会根据composer.json中的任何模糊逻辑(冒号后面的字符)来更新composer.lock文件和所有已安装的软件包 ! 这可以通过使用composer update vendor/package
来避免,但我不会build议养成它的习惯,因为你是一个被遗忘的论点,远离一个潜在的破坏项目。
让事情保持健全,并坚持与composer require vendor/package
添加新的依赖关系! 😉
我的用例更简单,只适合您的标题,而不是您的进一步的细节。
也就是说,我想安装一个新的软件包,这个软件包还没有在我的composer.json
而不需要更新所有其他的软件包。
这里的解决scheme是composer require x/y
就我而言,我有一个回购:
- 需求A,B,C,D in
.json
- 但在
.lock
只有A,B,C
同时,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
的解决scheme,但是composer php坚持要更新更多的东西,所以.lock
也改变了我的git工具。
我使用的解决scheme是:
- 删除所有
vendors
目录。 - 暂时从
VendorD/LibraryD
删除VendorD/LibraryD
的要求。 - 运行
composer install
。 - 然后删除文件
.json
并从repo中再次检出(相当于重新添加文件,但是避免了可能的空白变化)。 - 然后运行Seldaek的解决scheme
composer update vendorD/libraryD
它确实安装了这个库,但是另外, git
diff显示我在.lock
只添加了新的东西,而没有编辑其他的东西。
(Thnx Seldaek为指针;))