composer 是 php 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。
然而,对于如何『安装他们』,新手可能并不清楚。
网上的答案有的说 composer install,有的说composer update,而这两者似乎都能成功把依赖下载下来并安装好,那么他们究竟有何区别呢?
相关推荐:《composer教程》
首先要搞清楚的一件事情是,所有的依赖都定义在composer.json中,手册中给出了一些基本用法和例子。你可能已经注意到,在指定版本号的时候,我们并不一定要指明一个精确的版本。那么就有可能发生这么一个情况,对于同一份composer.json,我们在不同时刻拉取到的依赖文件可能不同(因为composer会在满足条件的情况下去拉取最新的那份依赖),从而导致一些异常情况。
composer update和composer install正是为了解决这个问题而出现的。
当你执行composer update的时候,composer会去读取composer.json中指定的依赖,去分析他们,并且去拉取符合条件最新版本的依赖。然后他会把所拉取到的依赖放入vendor目录下,并且把所有拉取的依赖的精确版本号写入composer.lock文件中。
composer install所执行的事情非常类似,只在第一步的时候有差别。当你本地如果已经存在一份composer.lock时,它将会去读取你的composer.lock而非composer.json,并且以此为标准去下载依赖。当你本地没有composer.lock的时候,它所做的事情和composer update其实并没有区别。
这意味着,只要你本地有一份composer.lock,你就可以保证无论过去了多久,你都能拉到相同的依赖。而如果你把它纳入你的项目的版本控制中,那么你就可以确保你项目中的每一个人、每一台电脑,不管什么系统,都能拉取到一模一样的依赖,以减少潜在的依赖对部署的影响。当然,请记得,你应该使用的命令是composer install。
那什么时候该使用composer update呢?当你修改了你的依赖关系,不管是新增了依赖,还是修改了依赖的版本,又或者是删除了依赖,这时候如果你执行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.
有人可能会很好奇php是怎么知道我修改了依赖,或者composer.lock已经过期了。很简单,如果你打开composer.lock的话,会发现其中有一个hash字段,这就是当时对应的那份依赖的哈希值。如果值不一致自然而然就知道发生了变更了。
这时候,你应该去通过composer update来更新下你的依赖了。
如果你不希望影响别的已经安装的依赖,仅仅更新你修改的部分,那你可以通过指定白名单来确定要更新的范围,例如composer update monolog/monolog仅会更新monolog/monlog这个依赖,别的依赖哪怕有更新也会被忽略。
以上是composer命令介绍之install和update及其区别的详细内容。更多信息请关注PHP中文网其他相关文章!

Composer是一个PHP依赖管理工具,通过composer.json文件管理项目依赖。1.安装Composer:运行几条命令并移动到全局路径。2.配置Composer:在项目根目录创建composer.json文件并运行composerinstall。3.依赖管理:通过composer.json指定库及其版本,使用语义化版本号控制。4.使用Autoloading:通过autoload字段定义类的自动加载规则,简化开发。5.包管理:支持私有库管理,通过repositories字段定义私有库地址

在开发PHP项目时,我们常常需要对代码的执行时间进行监控,以优化性能。在我最近的一个项目中,我遇到了一个问题:需要在不同代码段之间进行精确的计时,但手动实现计时器不仅繁琐,而且容易出错。经过一番探索,我发现了phpunit/php-timer这个库,它通过Composer轻松集成,极大地简化了我的工作。

在开发过程中,版本管理一直是个棘手的问题,尤其是在处理软件包依赖时。最近,我在项目中遇到了一个关于版本控制的问题:需要精确地管理和比较不同软件包的版本信息,确保项目能够正确地依赖和升级。我尝试了几种方法,但效果不尽如人意。最终,我找到了phar-io/version这个库,它完美地解决了我的问题。

在开发项目时,我常常需要使用一些新版本PHP的特性,但有时由于服务器环境的限制,不得不使用较低版本的PHP。这导致我无法使用某些新功能,比如PHP8.3中引入的json_validate和Override等。为了解决这个问题,我找到了Symfony的polyfill-php83库,它让我可以在低版本PHP中使用这些新功能。

在进行PHP项目开发时,统计代码行数是一项常见的需求,尤其是在评估项目规模或进行代码审查时。然而,手动统计不仅耗时且容易出错。最近,我在项目中遇到了这个需求,尝试了多种方法后,最终通过Composer安装sebastian/lines-of-code库,轻松解决了这一问题。

在开发PHP项目时,经常会遇到一些函数或方法执行时间过长,导致程序超时的问题。我曾尝试了多种解决方案,但效果不尽如人意,直到我发现了phpunit/php-invoker库。这个库通过设置超时时间来调用可执行函数,彻底解决了我的难题。

在开发一个文件处理系统时,我遇到了一个棘手的问题:如何准确地检测文件的MIME类型。最初,我尝试使用PHP的内置函数mime_content_type()和finfo类,但发现这些方法在处理某些特殊文件时不够稳定,导致系统误判文件类型,影响了用户体验。经过一番探索,我找到了league/mime-type-detection这个库,它为我的项目带来了完美的解决方案。

在项目开发中,我遇到了一个常见但棘手的问题:如何高效地管理和操作集合数据。我尝试了多种方法,但处理复杂数据结构时总觉得不够灵活和高效。后来,我发现了ramsey/collection这个库,它彻底改变了我的开发体验。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。