一、依赖管理
我们在开发时,不会所有的东西都自己写,有时会用到别人已经写好的库或者框架等。一般的做法是到官网或者GitHub下载这些包到指定的目录下,在使用的时候去引用就可以了。
但是如果需要使用的包比较多,而这些包的版本又比较多,甚至这些包还要依赖别的包,那这就是一个费时费力的工作了。于是出现了依赖管理的概念。
二、介绍Composer
Composer是PHP中的一个依赖管理工具。它可以让你声明自己项目所依赖的库,然后它将会在项目中为你安装这些库。
Composer不是包管理器。是的,它实际上和"包"或者库打交道,但是它是以项目为单位进行管理,把它们安装到你项目中的一个目录(例如vendor)。默认情况下它不会以全局的方式安装任何东西。因此,它是一个依赖管理器。
Composer解决的问题是:
a) 你有一个依赖N多库的项目。
b) 这些库中一些又依赖于其他的库。
c) 你声明你所依赖的库。
d) Composer找出哪些包的哪个版本将会被安装,然后安装它们(也就是把它们下载到你的项目中)。
你可以构建自己的开发包仓库,从你自己的仓库中下载安装包文件,也可以从Packagist上下载安装。
三、介绍Packagist
Packagist 是 Composer 的默认的开发包仓库。在Packagist上可以搜索你需要的PHP包,你可以看到当前的版本,每个版本的依赖关系和这个包在GitHub上的地址。
四、使用Composer
1. 下载安装composer
运行Composer需要 PHP 5.3.2+以上版本,我的机器是win10系统。
按下win+r,打开cmd,首先进入某个目录,然后依次执行下面3条命令,这里假设你已经正确安装了PHP,并且配置了环境变量。
php -r"copy('https://install.phpcomposer.com/installer','composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
上述 3条命令的作用依次是:
1) 下载安装脚本- composer-setup.php -到当前目录。
2) 执行安装过程。
3) 删除安装脚本。
进入刚才的目录,就会发现多了一个composer.phar的文件,这是 Composer的二进制文件。这是一个 PHAR包(PHP的归档),是 PHP的归档格式,可以帮助用户在命令行中执行一些操作。
2. 使用composer可以在局部(项目目录中)也可以在全局(网站根目录中)
1) 局部安装
将composer.phar复制到项目目录中,确定已经存在composer.json,在命令行中输入命令
php composer.phar install
将会开始下载依赖,如果提示”pleasecreate a GitHub OAuth token to go over the API rate limit”,访问https://github.com/settings/tokens/创建一个token,然后粘贴在命令行中,然后就会开始下载了。
2) 全局安装
使用局部安装时,需要在每一个项目目录中粘贴composer.phar。
如果不想这样的话,找到php根目录(php.exe存在的目录),将composer.phar粘贴进去,然后创建一个文件,取名composer.bat,在其中写入
@php "%~dp0composer.phar" %*
现在只需要进入你的项目目录,然后输入以下命令:
composer install
就可以开始安装依赖了
五、Packagist中国全量镜像
一般情况下,安装包的数据(主要是 zip文件)一般是从 github.com 上下载的,安装包的元数据是从 packagist.org 上下载的。
然而,由于众所周知的原因,国外的网站连接速度很慢,并且随时可能被“墙”甚至“不存在”。
“Packagist中国全量镜像”所做的就是缓存所有安装包和元数据到国内的机房并通过国内的CDN进行加速,这样就不必再去向国外的网站发起请求,从而达到加速 composerinstall以及 composer update 的过程,并且更加快速、稳定。因此,即使packagist.org、github.com 发生故障(主要是连接速度太慢和被墙),你仍然可以下载、更新安装包。
要从Packagist中国全量镜像上下载安装,就需要修改配置。两种方法:
1) 修改 composer的全局配置文件(推荐使用)
在命令行中输入以下命令
composer config -g repo.packagist composer https://packagist.phpcomposer.com
2) 修改当前项目的 composer.json 配置文件
打开项目根目录,输入命令
composer config repo.packagist composer https://packagist.phpcomposer.com
或者手动修改composer.json文件,在文末添加
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
}
六、composer.json
composer.json是composer的配置文件,包含了项目的名称、描述、作者、依赖和版本等信息。
七、composer.lock
安装完成后,会看到最后两行
Writing lockfile
Generatingautoload files
就是生成锁文件和自动加载文件。
composer使用composer.lock控制项目的版本,我们使用install命令来处理的时候,它首先会判断composer.lock文件是否存在,如果存在,将会下载相对应的版本(不会在于composer.json里面的配置),这意味着任何下载项目的人都将会得到一样的版本。
如果不存在composer.lock,composer将会通过composer.json来读取需要的包和相对的版本,然后创建composer.lock文件
这样子就可以在你的包有新的版本之后,你不会自动更新了,升级到新的版本,使用update命令即可,这样子就能获取最新版本的包并且也更新了你的composer.lock文件
八、vendor/autoload.php
除了库的下载,Composer还准备了一个自动加载文件,它可以加载 Composer下载的库中所有的类文件。使用它,你只需要将下面这行代码添加到你项目的引导文件中:
require
'vendor/autoload.php';
就可以使用vendor中下载的包了