Composer类库管理
4116阅读
0评论
0点赞
PHP之前的类库管理
php开发者很多,并且在web开发领域占据绝对统治地位. 在20年的发展过程中,无数开发者开发了无数的类库. 但是,当你想用某个库时,是怎么做的呢? 比如:phpmailer,一个发邮件的库,我们往往这样做: 1. 打开搜索引擎,搜索phpmailer. 2. 从phpmailer官网或不知名的网站,下载源码. 3. 解压然后放到自己的项目中,在看手册调用. 4. 假如phpmailer需要smtp类才能正常运行,又要继续从开始下载. 如上,我们可以看出,php的开发者虽多,类库虽多,但存在以下几个问题. 1. 没有统一的资源仓库,到处乱找. 2. 没有统一的安装方式.rar,zip,tar各种包都有.下载后自己得整理. 3. 遇到库的依赖关系,得自己再次下载解决. 可见,php的库虽多,但都是散落在互联网的各个角落,不成系统,且没有统一的规范. java有maven , python有pip, node.js有npm,前端有bower 自从有了composer,这些库就被组织起来了.安装composer
我们安装composer需要一定的要求,既然我们来到php这个目录下,就把需要的扩展打开; php版本要求:>=5.5.9; .OpenSSL扩展 .PDO扩展 .Mbstring扩展 如不满足以上条件,请修改php.ini 配置或重新编译PHliu下安装composer
cd
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文件, 说明他需要依赖很多库。 当然, 这些都可以自动下载。评论(0)
暂无评论