城边编程 phplog
写文章耗时100分钟
读完仅需9分钟
Composer是PHP的依赖管理工具,诞生的时间比较晚,在PHP5.3才正式发布。发布之后不温不火,支持的包也少,一度被认为是下一个pecl(比较失败的工具)。最近几年整合进PSR(PHP Standards Recommendation)才慢慢的被大家接受,虽然PHP程序员让人觉得天马行空,但对规范还是推崇备至。
现在,如果要学习PHP必须要会使用Composer,否则会偏离正确的学习路线。因为Composer中集成了几乎所有PSR规范,不按规范学习,家人两行泪。
Composer的发展历史
5年前,要是问PHP程序员Composer是什么?很多人不一定答的上。要是问phpize是什么?都知道是安装扩展的。而到今天PHPer每天都要使用Composer,回头看看这5年到底发生了什么?
1. Composer包太少,直到今天支付宝和微信的SDK包还不支持Composer。
2. 这种包管理方式有学习成本,旧方式一句include走天下。
3. 引入Composer后对代码的侵入性很强。
3. 有phpize安装扩展程序够用了。
而今天的情况已经大不一样:
1. 大家都按照PSR的规范在开发代码,Composer包越来越多。
2. 受其他语言的影响,特别是npm和cargo这种包管理方式的流行,一句`include `走天下的方式慢慢成为了历史,现在写PHP代码将不会再出现`include`和`require`(入口文件除外)。
3. 在规范面前,一切阻碍都是纸老虎,侵入性问题也不再是问题。
4. Composer现阶段无法替代phpize。
Composer的使用方法
1. 安装Composer
//unix and linux
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
//windows
C:\Users\username>cd C:\bin
C:\bin>php -r "readfile('https://getcomposer.org/installer');" | php
C:\bin>echo @php "%~dp0composer.phar" %*>composer.bat
2. Composer基本语法-使用下面三个基础命令就能很好的驾驭Composer
//初始化composer.json文件
composer init
//安装项目依赖文件
composer install
//更新项目依赖文件
composer update
3. Composer特殊设置
在国内首先要解决的就是网络问题,下面是多个Composer源,推荐使用aliyun。
阿里云 https://mirrors.aliyun.com/composer/
华为云 https://mirrors.huaweicloud.com/repository/php/
腾讯云 https://mirrors.cloud.tencent.com/composer/
安畅网络 https://php.cnpkg.org
上海交大 https://packagist.mirrors.sjtug.sjtu.edu.cn
配置方法如下,以阿里云为例
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
特别说明
1. 版本号通配符(非常重要)
在composer.json文件中需要设置依赖包的版本号,不同的通配符会导致`composer update`更新不同版本的依赖包。
`~1.0.1` 表示 >=1.0.1 < 1.1.0
`^1.0.1` 表示 >=1.0.1 < 2.0.0
假如设置的是`~1.0.1`,如果这个包的下一个版本号是`2.0.1`,将永远无法更新。
2. composer.lock锁文件一定要提交到代码库中
在安装依赖后,Composer 将把安装时确切的版本号列表写入 composer.lock 文件,这将锁定资源的版本。
有composer.lock后,任何人拿到你的项目都将下载与指定版本完全相同的依赖。你的持续集成服务器、生产环境、你团队中的其他开发人员、每个人都使用相同的依赖,从而减轻潜在的错误对部署的影响。
如果不存在 composer.lock 文件,Composer 将读取 composer.json 并创建锁文件。这时生产环境的版本可能和你本地的版本不一致,导致错误发生。
最后
PHP教程系列写到了第五篇,其他四篇如下,有兴趣的朋友可以看看。
PHP教程系列1-Web开发的大世界
PHP教程系列2-搭建PHP环境
PHP教程系列3-写PHP程序前必须知道的5件事
PHP教程系列4-按需加载的代码才有灵魂