composer基础与实践-上篇

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

目前,yii2.0或者laravel等web框架都在使用composer作为依赖管理工具,不仅可以很方便的升级框架本身代码,并且可以方便的安装各种第三方开源库,所以对composer做一个基本的了解是必要的。

下面从0搭建一个基于composer的小项目,重在掌握项目开发中必备的知识点。

1,创建一个空的项目目录。

2,下载composer程序自身(国内服务器会被墙,需要使用国外服务器或者翻墙)

3,编写针对该项目的composer配置文件,叫做composer.json。

composer支持配置很多项目的基础信息,例如项目名称,作者,项目的开源协议等等,如果你的项目是准备开源给他人使用,那么一般都要写的比较详细(有利于增加自己知名度)。

由于我们是自己写项目不开源,所以这一块我们就写一个name项目名称试验一下即可,所以composer.json文件一开始长这样。

4,现在可以基于composer.json文件,为项目初始化composer环境(一个项目只需要初始化一次)。

这里遇到一个插曲:遇到了内存不足的报错,已分配过的内存是52M,继续分配4M的时候就mmap失败内存不足了。52M内存肯定是有的,毕竟vps是768MB内存的机器,free -m看了一下果真剩余了40M内存,ps aux看了一下1个php-fpm进程占用了130M内存,根据经验立即怀疑了opcache,其配置中默认是128M的缓存空间,关闭opcache重启php-fpm,内存恢复。

可见,composer生成了自己需要的目录,以及若干“自动加载”功能相关的php代码。先继续往下试验,我们会看一下这些文件大概做了什么事情,加深理解。

5,接下来,我想安装一个第三方日志库monolog,比较好的方法是通过网站packagist.org来查找关键字(另一种方法是通过composer.phar的search命令,但是没有办法查看历史版本),我找到了https://packagist.org/packages/monolog/monolog这个库,里面列举了若干历史版本,其中dev-master是正在开发中的主干(可能不稳定),我们一般都是取一个历史版本,我选择1.21.0,通过命令安装一下即可:

这里:1.21.0明确指定了版本,composer支持其他几种形式定义版本,例如>=1.21.0指不低于1.21.0的版本,这里不展开。

我们重点要知道require命令背后做了什么事情,最后我们完全可以模拟整个过程而绕开require命令实现相同的效果。

a)首先它把monolog这个依赖写到了composer.json配置文件里,也就是require字段里的内容。

b)其次composer会执行php composer.phar update命令,这个命令会根据当前的composer.json文件生成一个composer.lock文件(一个执行计划),lock文件里包含了更详细的描述信息,以及monolog的二级依赖等。接下来,会根据lock文件,从网络上下载monolog需要的安装包到本地进行部署,最终都会安装到vender目录下。最后,会更新vender下的各类autload_前缀的文件,以便后续开发者能够方便的引入monolog,这是后话。

6,monolog安装完成,现在写一个项目主文件index.php,来调用一下monolog打印一条日志。

这里引入了vender目录下的autoload.php文件,这个文件是composer生成的,它基于php的autoload能力,当你引入一个不存在的类或者函数的时候,composer的autoload函数将被唤起来找到对应的文件,保证你通过composer管理的库可以自动引入,所以composer使用是非常简单的,只需要引入这一个文件在你的代码入口即可方便的使用各种开发库了~

下一篇博客里,会通过学习composer的autoload功能,进一步理解composer如何实现“自动加载”以及支持哪些具体的自动加载协议。

发表评论

电子邮件地址不会被公开。