使用Composer的正确姿势

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/QinDaBao_/article/details/88667376

一、拉取组件是不是很慢?

换源(中国全量镜像)

修改 composer 的全局配置文件

打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:

composer config -g repo.packagist composer https://packagist.phpcomposer.com

镜像原理

一般情况下,安装包的数据(主要是 zip 文件)一般是从 github.com 上下载的,安装包的元数据是从 packagist.org 上下载的。

然而,由于众所周知的原因,国外的网站连接速度很慢,并且随时可能被“墙”甚至“不存在”。

“Packagist 中国全量镜像”所做的就是缓存所有安装包和元数据到国内的机房并通过国内的 CDN 进行加速,这样就不必再去向国外的网站发起请求,从而达到加速 composer install 以及 composer update 的过程,并且更加快速、稳定。因此,即使 packagist.orggithub.com 发生故障(主要是连接速度太慢和被墙),你仍然可以下载、更新安装包。

二、安装应该使用哪个命令呢,install, update 还是 require ?

举个例子

这个fork过百的composer管理的组件包,他的安装命令有问题。地址在此
composer包文档错误

由于对composer命令的不准确理解,导致出现加载版本错误的情况。

composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害。

因为composer update的逻辑是按照 composer.json指定的扩展包版本规则,把所有扩展包更新到最新版本,注意,是 所有扩展包,举个例子,你在项目一开始的时候使用了 monolog,当时的配置信息是

"monolog/monolog": "1.*",

后果

安装的是 monolog 1.1 版本,而一个多月以后的现在,monolog 已经是 1.2 了,运行命令后直接更新到 1.2,这时项目并没有针对 1.2 进行过测试,项目一下子变得很不稳定,情况有时候会比这个更糟糕,尤其是在一个庞大的项目中,你没有对项目写完整覆盖测试的情况,什么东西坏掉了你都不知道。

命令定义

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

composer update - 从 composer.json 安装最新扩展包和依赖;

composer update vendor/package - 从 composer.json 或者对应包的配置,并更新到最新;

composer require new/package - 添加安装 new/package, 可以指定版本,如: composer require new/package ~2.5.

下来介绍几个日常生产的流程,来方便加深大家的理解。

情景一:开发者引入新组件

扫描二维码关注公众号,回复: 6506145 查看本文章
创建 composer.json,并添加依赖到的扩展包;
运行 composer install,安装扩展包并生成 composer.lock;
提交 composer.lock 到git代码版本控制器中,不要加入忽略。

情景二:协作者安装现有组件

克隆或者更新项目后,其他开发者引入新的组件,这是我们需要也拉下来。根目录下直接运行 composer install 从 composer.lock 中安装 指定版本 的扩展包以及其依赖;

此流程适用于代码部署。

情景三:为项目添加新组件

使用 composer require vendor/package 添加扩展包,

可以规定版本号,如:

composer require "foo/bar:1.0.0"

相比较情景一,更推荐require的方式对组件进行添加,升级操作。

三、拉取失败后怎么办?

分析

每个人是从菜鸡阶段过来的,一开始,我们对 Composer 不熟,用的是官方源,非国内镜像,导致网络不稳定或者很慢很慢导致超时。往往一次不顺之后,再次拉取还是不行。
此时需要检查composer.json是否格式正确,不过一般我们不希望phper自己去修改composer.json文件,因为无论安装,卸载,升级,都可以通过composer命令进行管理。

原因

拉取失败很大几率是网速问题导致的。

解决

先清理cache

 composer clear-cache
 // Aliased to clearcache, clears composer's internal package cache.

清理chache之后,再次拉取就可以避免进入失败的死循环,同时建议更换国内源以提高网速和稳定性,如果条件具备可以挂网速稳定的vpn代理科学上网,保证composer顺利工作。

此时我们在项目中使用composer,基本没什么问题了。

猜你喜欢

转载自blog.csdn.net/QinDaBao_/article/details/88667376