前言:
开发中很多程序员只知道项目初始化的时候composer install一下,实际并不知道composer install走了什么。更分不清compose install和composer update的区别是什么,从compose install字面意思看到时安装,实则并不知道从哪来安装,从compose update字面意思看到时更新,实则并不知道从哪来更新所以今天主要讲下composer.json和composer.lock的区别
为了使团队中每个人引入的第三方包尽量保持一致,所有有了composer.lock的文件来锁定。当项目初始化的时候,项目中只用compose.json文件,当执行compose install的时候compose会优先寻找compose.lock文件,当发现compose.lock文件不存在的时候会去寻找compose.json.会根据composer.json中的包以及包版本号去安装(注意:这里的安装如果在没有指定具体的版本号时就会安装最新的版本)
composer install讲解:
composer.json中的版本符号
例如:
^ 符号 :限制大版本,也就是^2.0.22,也就是不能超过2,最大只能为2.9.9
~ 符号 :限制小版本,也就是~2.0.22,也就是不能超过0,最大只能为2.0.9
composer update讲解:
实际当执行composer update的时候,composer会优先从composer.json的文件中去寻找第三方包以及包的版本(注意:主要composer.json文件中存在一些没有具体的版本号,如上图) 所以compose就会把当前第三方包更新为最新的,这样就会存在一个问题,那就是导致你本地与项目中的插件版本不一致导致导致出错。
所以总结出来一个结论:
composer install 执行的是composer.lock,当composer.lock不存在就会从composer.json去寻找安装。
composer update执行的是composer.json (注意这里会把项目中没有指定具体版本号的包更新为最新的)
所以平时谨慎执行compose update
项目中的第三方包流程:
- 初始化项目:执行 composer install ,生成composer.json和composer.lock
- 上传composer.json和composer.lock到git仓库,方便开发人员来取到和线上一样的composer.lock (注意:上面讲了 composer install是从composer.lock获取包|版本,为什么还要上传composer.json,当然也可以不上传,但是需要开发人员在本地建立一个空的compose.json文件,因为compose要求必须要有composer.json和composer.lock 两个文件)
- 当开发人员拉取到compose.lock文件后,执行compose install即可安装与线上环境一模一样的第三方包。
- 完毕。