您的位置:首页 >> LNMPA >> Composer——PHP依赖关系管理工具
Composer——PHP依赖关系管理工具
[ 孤狼 | 2017-07-28 13:21:18 | LNMPA ]

越来越多的语言自带类库管理器,但是作为做好的语言PHP却没有,这不行,于是就诞生了Composer。虽然很久之前就知道,但是一直都是自己写类,所以一直没有用过,最近觉得再不去了解一下,等他火了,我就落伍了,So,我们来学习一下。


Composer是干咩的?


Composer是一个PHP的类库依赖管理器,比如你项目中使用了一些别人的公开类库,而你又不想去手动下载,那么Composer就会自动帮你下载,保证你的程序运行。

如果你的项目天大,包含了几万个开源类库的使用。那么你的代码包会有几个GB,但是有了Composer,你的代码包可能就只有几十MB。就像linux里的yum -y命令一样,你只需要运行你要的,它会自动帮你解决关联的必须程序。

试想一下,如果去部署一个项目,一个优盘,拷贝一个十几兆的项目到服务器上,然后启动Composer解决关联类库,然后Composer会自动下载了好几个GB的关联类库,然后运行的时候,Composer会帮你处理好关联,让你调用类库不会失败。

好了,Composer就是这么个类库管家。它更像是一个公共类库目录,你只要圈出你要的类,他就会把类送到你的项目中去,从而达到,省事的目的。


Composer优势是咩啊?


Composer类库来自Github等开源平台,如果你下载的是类库文件,那么只能自己更新,如果你用Composer,那么类库是自动同步更新,换句话说,有成千上万的程序帮你维护类库。


如果我不用其他类库或者我的类库都是固定的几个需要Composer吗?


不需要,Composer只是类库依赖工具,如果你的类都是自我研发,自己开发类使用,那么Composer对你来说,没有意义。


能不能举个栗子?


你的项目需要使用二维码。以往你是去找个二维码类,然后放到你的项目中,然后调用使用。

有了Composer,你只需要配置好,然后直接使用,而且随处调用(全局安装方式)。不用去下载,不用担心版本过老。

如果你需要的类有几百个呢?Composer的优势就体现出来了,你不用去一个个下载,只要把你要用的类写进Composer的配置文件,就完事了,完事了,事了,了。。。。


Composer有啥危害?

Composer对于一个热爱程序的人来说,危害很大。因为用时间久了就真成了搬砖工了,只需要写调用代码,而不用写实现方法,因为都是引用别人写好的类,慢慢的,技能下降。。。。好可怕。。。


好了说了那么多,来看看怎么使用吧。





————安装————


运行 Composer 需要 PHP 5.3.2+ 以上版本。一些敏感的 PHP 设置和编译标志也是必须的,但对于任何不兼容项安装程序都会抛出警告。

我们将从包的来源直接安装,而不是简单的下载 zip 文件,你需要 git 、 svn 或者 hg ,这取决于你载入的包所使用的版本管理系统。


下载安装文件


linux:

打开命令行或命令界面,输入:

curl -sS https://getcomposer.org/installer | php

curl -sS https://getcomposer.org/installer | php -- --install-dir=bin

第二种方式可以指定安装目录

1.jpg

如果安装过程中出现错误,那么你可以使用以下命令来安装:

php -r "readfile('https://getcomposer.org/installer');" | php

该命令会检测环境后安装。


全局化

你可以把composer转移放到系统的PATH目录中,这样就可以全局访问。

mv composer.phar /usr/local/bin/composer


windows:

下载地址:https://getcomposer.org/Composer-Setup.exe

运行它将安装最新版本的 Composer ,并设置好系统的环境变量,因此你可以在任何目录下直接使用 composer 命令。



OSX(MAC):

Composer 是 homebrew-php 项目的一部分。在苹果系统上使用brew安装。

brew update
brew tap josegonzalez/homebrew-php
brew tap homebrew/versions
brew install php55-intl
brew install josegonzalez/php/composer


安装完之后,我们用下面命令来调用下看看是否安装成功

php composer.phar

composer

注意,如果linux系统做了全局化,那么可以不用输入前缀php,直接使用composer命令即可

2.jpg




————使用————


调用方法


调用方法,默认调用方法是

php composer.phar

composer

在linux全局安装后,可以直接使用composer来代替php composer.phar命令。


composer.json


安装好了Composer怎么用到项目中去呢?这里我们使用composer.json文件。用过一些开源框架比如laravel,你就会发现他们的根目录有个composer.json文件,这说明他们的项目支持了Composer。


那怎么自己写呢?

composer.json本身就是一个json文件,所以使用json格式来配置里面的内容。例如:

{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

这样,就是告诉Composer,需要加载monolog提供的monolog程序的1.0.*版本。

因为每个人都可能起名重复,所以加载方式是用户名+程序名+版本号的方式加载,为了方便理解,这里扯淡一个程序:

{
    "require": {
        "gulang/dashaqi": "1.0.0"
    }
}

上面的意思就是加载gulang开发的dashaqi程序的1.0.0版本。


版本号可以有几种方式来定义


具体的:1.0.1
范围的:>=1.0.0 >=1.0.0,<2.0.0 >=1.0.0,<2.0.0|<3.0
通配的:1.0.*
赋值运算符的:~1.2 等同于 >=1.2,<2.0(使用 ~ 指定最低版本,但允许版本号的最后一位数字上升。)


获取依赖包


我们配置好了composer.json文件之后,接下来我们就要去获取依赖包了。命令行进入项目根目录(composer.json文件目录)

然后输入:

php composer.phar install

composer install

这样,就会自动开始下载依赖包到一个vendor的目录,这里Composer建议把第三方的类库放到vendor文件夹中管理,默认即可。

3.jpg

当依赖包下载完毕之后,你的项目目录里就会多出来一个vendor文件夹,和一个composer.lock文件。

4.jpg

composer.lock文件是在安装依赖后,Composer 把安装时确切的版本号列表写入 composer.lock 文件。这将锁定该项目的特定版本。如果你的项目是转移安装的,记得连同composer.lock文件一起拷贝,因为install命令在识别的时候会优先识别lock文件,如果lock文件中已经指定文件版本,则会忽略json文件中的版本。这样做的目的是避免一些三方库升级导致不兼容的问题。lock指定的版本就是你的开发用的版本,这样做就能保证调用的方法不会出错。当然如果该版本的三方库存在漏洞等,就要去lock文件里删除这个三方库,让install使用json文件来获取最新的版本。同时你也可以使用update命令来升级版本

composer update

如果你怕全部升级导致不兼容,可以指定单个依赖包来升级

composer update monolog/monolog

5.jpg


自动加载


自动加载,在Composer加载完依赖包之后,会在vendor目录下创建一个antuload.php文件,这个是自动加载文件。在项目中直接使用即可。

include_once("./vendor/autoload.php");

6.jpg


PHP调用依赖包


直接上例子,这里我们使用了dsgygb/text2pic的类库,是一个文字生成图片的程序:

<?php
include_once("./vendor/autoload.php");
$img=new Text2pic\Transform("by gulang",'./','./');
$result = $img->generate("hello world");
if($result["message"]=="ok"){
	var_dump($result);
	echo '<img src="/'.trim($result['data']['url'],'./').'">';
}else{
	echo '运行失败';
}

运行之后的结果

7.jpg

我们看到运行已经成功了


到这里,Composer的用法就已经说完了。



————资源包————


虽然Composer那么强大,但是我怎么知道我能安装哪些库呢?

这里就要用到一个网站Packagist(https://packagist.org/)

Packagist是composer的资源库,直接在网站上搜索你要的功能的关键字即可,支持中文哦。


[传送门] Packagist

[传送门] Composer



转载请注明出处:http://gl.paea.cn/lnmpa/content/2017/07/28/103.html