composer命令介绍install和update及两者之间的区别

本文中的环境版本信息如下:

composer版本:Composer version 2.5.4


        composer是php的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。

        

        然而,对于如何『安装他们』,新手可能并不清楚。网上的答案有的说 composer install,有的说 composer update,而这两者似乎都能成功把依赖下载下来并安装好,那么他们究竟有何区别呢?


        首先要搞清楚的一件事情是,所有的依赖都定义在composer.json文件中,手册中给出了一些基本用法和例子。你可能已经注意到,在指定版本号的时候,我们并不一定要指明一个精确的版本。


        那么就有可能发生这么一个情况,对于同一份composer.json,我们在不同时刻拉取到的依赖文件可能不同(因为composer会在满足条件的情况下去拉取最新的那份依赖),从而导致一些异常情况。


        composer update和composer install正是为了解决这个问题而出现的。


        1、当你执行 composer update 的时候,composer会去读取composer.json中指定的依赖,去分析他们,并且去拉取符合条件最新版本的依赖。然后他会把所拉取到的依赖放入vendor目录下,并且把所有拉取的依赖的精确版本号写入composer.lock文件中。


        2、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这个依赖,别的依赖哪怕有更新也会被忽略。

install、update、require简单概括总结

  • composer install - 如果有composer.lock 文件,直接安装,否则从 composer.json 安装最新扩展包和依赖。

  • composer update - 从composer.json文件中安装最新的扩展包和依赖(如果没有指定具体扩展包 则项目中所依赖的所有扩展组件包都将更新到最新版本)。

  • composer update package  - 从composer.json文件中或者对应包的配置 将package包 更新到最新版本。

  • composer require new/package - 添加安装new/package, 可以指定具体要安装的扩展组件版本,如:composer require new/package ~2.5

日常使用流程步骤

接下来介绍几个日常生产的流程。

流程一:新项目流程

①、创建composer.json文件,并添加项目中需要依赖用到的各种扩展组件包。

②、运行composer install命令,安装扩展组件包并生成composer.lock文件。

③、提交composer.lock文件 到代码版本控制器中,如:git。

流程二:项目协作者安装现有项目

克隆项目后,在项目的根目录下直接运行 composer install命令 从composer.lock文件中 进行安装指定版本 的扩展包以及其依赖。

此流程适用于生产环境代码的部署。

流程三:为项目添加新扩展包

①、使用composer require new/package 添加扩展包。

②、提交更新后的composer.json和 composer.lock文件 到代码版本控制器中,如:git。

关于扩展包的安装方法

准备给项目添加一个新的扩展组件包的时候,install、update、require 三个命令都可以用来安装扩展包,选择哪一个才是正确的呢?

答案是:使用 composer require命令

另外,在手动修改composer.json文件 添加扩展包后,composer update new/package 进行指定扩展包更新的方式,也可以正确的安装,不过不建议使用这种方法,因为,一旦你忘记敲定后面的扩展包名,就会进入万劫不复的状态(一旦忘记敲定后面的扩展包名 那么就会更新项目中所有的扩展组件包到最新版本),别给自己留坑呀。

原有项目新添加扩展的,都使用 composer require new/package 这种方式来安装。

更新指定扩展到指定版本

有时候你之前使用过的一个扩展组件包,加入了新功能,你想单独更新这个扩展包到指定版本,也可以使用 require 来操作。

如下面例子,需要更新 "elasticsearch/elasticsearch": "7.11.0"到"elasticsearch/elasticsearch":"7.17.2"

composer require elasticsearch/elasticsearch:"7.17.2"



声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。

小周博客
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

精彩评论

全部回复 0人评论 7,777人参与

loading