欢迎光临
我们一直在努力

Composer类库管理

PHP之前的类库管理


php开发者很多,并且在web开发领域占据绝对统治地位.
20年的发展过程中,无数开发者开发了无数的类库.
但是,当你想用某个库时,是怎么做的呢?
比如:phpmailer,一个发邮件的库,我们往往这样做:
1.
打开搜索引擎,搜索phpmailer.
2.
phpmailer官网或不知名的网站,下载源码.
3.
解压然后放到自己的项目中,在看手册调用.
4.
假如phpmailer需要smtp类才能正常运行,又要继续从开始下载.
如上,我们可以看出,php的开发者虽多,类库虽多,但存在以下几个问题.
1.
没有统一的资源仓库,到处乱找.
2.
没有统一的安装方式.rar,zip,tar各种包都有.下载后自己得整理.
3.
遇到库的依赖关系,得自己再次下载解决.
可见,php的库虽多,但都是散落在互联网的各个角落,不成系统,且没有统一的规范.
java
maven , pythonpip, node.jsnpm,前端有bower
自从有了composer,这些库就被组织起来了.

安装composer

我们安装composer需要一定的要求,既然我们来到php这个目录下,就把需要的扩展打开;
php
版本要求:>=5.5.9;
.OpenSSL
扩展
.PDO扩展
.Mbstring扩展
如不满足以上条件
,请修改php.ini 配置或重新编译PH

liu下安装composer


cd <path/to/php>
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/bin/composer

配置composer 修改国内镜像


因为composer的软件仓库位置在国外,所以我们修改国内镜像,提高速度

composer config -g repositories.packagist composer https://packagist.phpcomposer.com

为项目引入某个库

假如我们blog项目中需要smarty这个组件,我们来到https://packagist.org/ 搜索smarty,并注意看项目的目录和版本信息.
我们需要在项目根目录下写入composer.json文件,注意必须是json格式
内容如下
:

{
"require" : {
"smarty/smarty":"3.1.30"
}
}


然后,我们到项目的根目录下输入composer install

D:\xampp\htdocs\myphp\blog>composer install
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Installing smarty/smarty (v3.1.30)
Downloading: 100%
Writing lock file
Generating autoload files


查看项目根目录下,有一个vendor的文件夹,文件夹内有一个smarty的文件夹


如何加载引入的库


.如果我们通过composer引入上百个类库,我们如何引入呢,手工require?
.
不用的,composer的类都满足一定的标准(psr-4标准);
.Composer
中生成了一个vendor/autoload.php的文件(我们都只到autoload是自动加载)
.
利用它你可以很容易的就引入这个文件,会得到完善的自动加载支持.
.
下面我们自己在项目下写一个文件看如何引入smarty这个类


require(__DIR__ . '/vendor/autoload.php');
print_r( new Smarty() );


添加某个新库


假如项目后期需要引入某个新库,比如phpmailer处理库
只需要在
require后添加就可以,:

{
"require" : {
"smarty/smarty":"3.1.30",
"phpmailer/phpmailer": "5.2.16"
}
}


然后composer install,可能会出现composer.json较新,composer.lock较旧这样的错误

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.jso
n. You may be getting outdated dependencies. Run update to update them.
Nothing to install or update
Generating autoload files


解决办法::(warning 提示的就是答案)

composer update


 卸载某个库


以卸载phpmailer为例

composer remove phpmailer/phpmailer ,不必加版本号.


卸载成功后,composer.json自动变为:

{
"require" : {
"smarty/smarty":"3.1.30"
}
}


不配置json文件新增某库

composer require 厂商/类库=版本说明


比如:我们新增另外一个叫phpmailer的库,先到https://packagist.org/搜索phpmailer

composer require phpmailer/phpmailer=5.2.16


运行后会发现vendor下多出来一个phpmailer’目录.
composer.json文件和comopose.lock文件也已自动更新
如下
::

{
"require" : {
"smarty/smarty":"3.1.30",
"phpmailer/phpmailer": "5.2.16"
}
}


库的版本说明


版本约束可以由以下几个方法来指定
波浪号运算
~最好用例子来解释: ~1.2相当于>=1.2,<2.0, 而~1.2.3 相当于 >=1.2.3,<1.3。 即, 版本号最后一位数字可且只可提升.

composer 创建项目


刚才我们是用composer引入某个库,库放在vendor目录下,供项目使用
那对于项目
,我们需要怎么去做,显示这种效果呢?
我们需要下载项目的源码,然后放在自定义的文件夹下,而不是vendor目录下
然后执行
cmd命令

composer create-project laravel/laravel=5.5.0


执行后,在当前目录下,我们会发下多出一个laravel的目录
代码结构如下
::
你可以看到, laravel目录下, 有个composer.json文件, 说明他需要依赖很多库。 当然, 这些都可以自动下载。

未经允许不得转载:小罗同学 » Composer类库管理

分享到:更多 ()