Composer 是 PHP5.3以上 的一个依赖管理工具。它允许你声明项目所依赖的代码库,它会在你的项目中为你安装他们。Composer 不是一个包管理器。是的,它涉及 "packages" 和 "libraries",但它在每个项目的基础上进行管理,在你项目的某个目录中(例如 vendor)进行安装。默认情况下它不会在全局安装任何东西。因此,这仅仅是一个依赖管理。PHP中的包管理器是PEAR,类似与java中的maven,python中的pip,nodejs中的npm。但是PEAR中依赖处理容易有问题,配置也是比较复杂,还有难用的命令行接口,所以自从PHP有了Compoer后,它是依赖管理的利器。
composer中文网:https://www.phpcomposer.com/
一安装
【1】命令安装
利用curl下载composer脚本,然后利用PHP执行安装脚本,然后在当前目录中创建一个composer.phar文件,它是composer的二进制文件。另外最好不要用root超级用户执行composer命令。
vagrant@ubuntu:~$ curl -sS https://getcomposer.org/installer | php
All settings correct for using Composer
Downloading...
Composer (version 1.8.5) successfully installed to: /root/composer.phar
Use it: php composer.phar
vagrant@ubuntu:~$ ls
composer.phar
【2】移动文件
//将文件移动到bin下
vagrant@ubuntu:~$sudo mv composer.phar /usr/local/bin/composer
【3】可执行
//将composer变成可执行二进制文件
vagrant@ubuntu:~#sudo chmod +x /usr/local/bin/composer
【4】添加环境变量
vagrant@ubuntu:~$ vim .profile
//在文件最后一行我添加这行代码
PATH="/usr/local/bin:$PATH"
【5】安装成功
vagrant@ubuntu:~$ composer
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.8.5 2019-04-09 17:46:47
Usage:
command [options] [arguments]
【6】配置国内镜像
//因为composer的软件仓库位置在国外,所以我们修改国内镜像,提高速度
vagrant@ubuntu:~$ composer config -g repo.packagist composer https://packagist.phpcomposer.com
二使用
【1】新建一个项目目录
在这个目录中,我们来测试一下引入组件。
vagrant@ubuntu:/vagrant/web$ ls
index.php
vagrant@ubuntu:/vagrant/web$ mkdir demo
vagrant@ubuntu:/vagrant/web$ cd demo/
【2】为项目引入某个库
假如我们blog项目中需要smarty这个组件,我们来到https://packagist.org/ 搜索smarty,并注意看项目的目录和版本信息. 我们需要在项目根目录下写入composer.json文件,注意必须是json格式。
//创建一个文件composer.json
vagrant@ubuntu:/vagrant/web/demo$ cat composer.json
{
"require":{
"smarty/smarty":"3.1.30"
}
}
//然后执行composer install等待安装
vagrant@ubuntu:/vagrant/web/demo$ composer install
/*
然后安装组件成功后,会生产一个composer.lock这个文件会列出来项目中所有的PHP组件,
以及组件的具体版本号,这个其实是锁定了项目,只能使用具体版本的PHP组件。
这个文件最好纳入版本控制,这样能在团队开发中,使用的PHP组件版本一致,从而降低版本异常。
这个文件有个缺点,就是在使用composer install命令安装的时候,
不会安装比文件中列出来的版本号高。如果确实要更新组件,可以使用composer update命令。
*/
//另外会在目录下看到有一个vendor的文件夹,里面有一个smarty的文件夹
vagrant@ubuntu:/vagrant/web/demo$ ls
composer.json composer.lock vendor
vagrant@ubuntu:/vagrant/web/demo$ cd vendor/
vagrant@ubuntu:/vagrant/web/demo/vendor$ ls
autoload.php composer smarty
【3】自动加载组件
composer下载的PHP组件会为项目的所有依赖创建一个符合PSR标准的
自动加载器,我们只需要引入vendor/autoload.php文件就好了。这些组件就会按需加载,我们可以实例化项目中任何PHP组件。
//我新建一个index.php引入smarty的组件,利用php运行可以实现。
vagrant@ubuntu:/vagrant/web/demo$ cat index.php
<?php
require(__DIR__.'/vendor/autoload.php');
var_dump(new Smarty());
【4】配置文件composer.json
每个PHP组件的名称都是由全局唯一的厂商名,和包名组成,防止与其他组件有冲突,另外厂商名和包名一般使用小写字母。厂商名是组件的一个品牌,用于识别组件属于谁,包名用于识别指定厂商名下的PHP组件,一个厂商下面可以有很多组件。
{
"require":{
"厂商名/包名":"版本说明"
}
}
【5】为项目添加新库
假如项目后期需要引入新的库,比如phpmailer处理库,我们只需要在require后面添加就可以。
{
"require":{
"smarty/smarty":"3.1.30",
"phpmailer/phpmailer":"5.2.16"
}
}
然后composer install,可能会出现composer.json较新,composer.lock较旧这样的错误。
vagrant@ubuntu:/vagrant/web/demo$ vagrant@ubuntu:/vagrant/web/demo$ composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.
Nothing to install or update
Generating autoload files
//然后可以利用compose update更新一下
composer update
//然后可以看到已经引入
vagrant@ubuntu:/vagrant/web/demo$ ls vendor/
autoload.php composer phpmailer smarty
【6】卸载某个库
vagrant@ubuntu:/vagrant/web/demo$ composer remove phpmailer/phpmailer
//卸载后composer.json里面的phpmailer一行也会被删除