关于composer开发部署的思考

composer.lock的实际作用

       前段时间在公司开发时,出现了本地的ampq扩展没有问题,但是发布到线上之后出现找不到类的错误,当时一脸懵逼,于是去看jenkins的部署log,发现shell脚本执行了一个composer install命令,之前确实没用过这个命令,往往都是缺少的包用composer require包含进来,然后直接写完代码push上去,也没出过问题。

       于是去composer官网查了下文档,原来composer update是将当前所有的依赖包都更新到最新版本,如果使用这个的话会导致旧的代码可能因为包版本不兼容出问题,所以部署时为了避免出现这种情况,除了在compsoer.json中配置require-dev之外,线上都会执行一下composer install命令。而我们本地开发 的时候,在用require包含新的包之后将当前的包信息锁定到composer.lock文件中,这样每次部署的时候都执行一个composer install命令,保证包版本兼容。

团队开发时,为了避免新版本的包不兼容旧的代码,一般按照如下步骤操作:

  1. 删除掉composer.lock文件
  2. 在compoer.json添加新的依赖包(或者composer require)
  3. composer install
  4. 将代码push到git
  5. 部署时线上shell脚本也运行composer install(此时lock里只有新增的依赖包,旧的依赖包仍是旧版本)

下面是一些composer的常用命令:

composer 使用默认php版本

php composer 使用指定php版本

php composer update 获取依赖最新版本,并升级composer.lock文件 (--no-dev 参数只更新require下的包不更新require-dev里的包)

php composer install 如果有composer.lock文件根据该文件安装,否则根据composer.json

composer dumpautoload 更改composer.json后重新加载(--optimize或-o 映射到map优化加载速度)

自动加载原理:https://segmentfault.com/a/1190000014948542

官方文档:https://docs.phpcomposer.com/03-cli.html#install

Packagist:https://packagist.org/

发布了253 篇原创文章 · 获赞 47 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/why444216978/article/details/104565658