作为程序员一定要保持良好的睡眠,才能好编程

PHP依赖的自动化管理工具-composer

发布时间:2019-06-06

Composer 被看做PHP进入现代化的一个重要里程碑。使用Composer不仅可以减少开发工作量,也能更加深入理解程序运行原理。本文将详细介绍Composer的使用,并最终提交自己的类库到线上,实现一次提交,处处安装的效果。


Composer的安装必要前提是:

1、PHP的版本要高于5.2

2、PHP支持openssl扩展

3、安装git版本管理工具



既然有composer,就会有packagist的身影,那么Packagist是什么?

Packagist是composer提供的安装包汇总网站,类似于手机上的应用市场,我们可以上传自己的包供其他用户下载。包的代码托管在Github平台,管理起来非常方便。

Packagist 的网址为 https://packagist.org/


工欲其事必备其器-composer的安装

http://www.xiaosongit.com/index/detail/id/148.html


composer 中国镜像站使用

http://www.xiaosongit.com/index/detail/id/151.html



下载 Composer

安装前请务必确保已经正确安装了 PHP。打开命令行窗口并执行 php -v 查看是否正确输出版本号。


打开命令行并依次执行下列命令安装最新版本的 Composer:


 

php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
 
php composer-setup.php
 
php -r "unlink('composer-setup.php');"

执行第一条命令下载下来的 composer-setup.php 脚本将简单地检测 php.ini 中的参数设置,如果某些参数未正确设置则会给出警告;然后下载最新版本的 composer.phar 文件到当前目录。


上述 3 条命令的作用依次是:


下载安装脚本 - composer-setup.php - 到当前目录。

执行安装过程。

删除安装脚本。


局部安装

上述下载 Composer 的过程正确执行完毕后,可以将 composer.phar 文件复制到任意目录(比如项目根目录下),然后通过 php composer.phar 指令即可使用 Composer 了!


全局安装

全局安装是将 Composer 安装到系统环境变量 PATH 所包含的路径下面,然后就能够在命令行窗口中直接执行 composer 命令了。


Mac 或 Linux 系统:

打开命令行窗口并执行如下命令将前面下载的 composer.phar 文件移动到 /usr/local/bin/ 目录下面:

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


Windows 系统:

找到并进入 PHP 的安装目录(和你在命令行中执行的 php 指令应该是同一套 PHP)。

将 composer.phar 复制到 PHP 的安装目录下面,也就是和 php.exe 在同一级目录。

在 PHP 安装目录下新建一个 composer.bat 文件,并将下列代码保存到此文件中。


@php "%~dp0composer.phar" %*


最后重新打开一个命令行窗口试一试执行 composer --version 看看是否正确输出版本号。


composer.png


看到这里,composer基本安装已经完毕。



composer使用篇


1、composer  search  guzzlehttp

composer2.png


2、使用composer require guzzlehttp/guzzle


composer3.png


composer4.png


此时composer却生成了很多文件和目录。

有vendor目录

    └ composer目录

    └ 第三方目录

    └....

    └ autoload.php 

composer.lock

这些文件

所有从composer网站上拉下来的代码  都会放在vendor目录这个目录下面。

$ ls vendor/
autoload.php  composer/  guzzlehttp/  psr/  ralouphie/



认识composer.json 和 composer.lock 文件

1、composer.json 文件

compsoer5.png

这是上面的一个项目刚刚引入的json文件, require 这个包文件。


包名称使用了类似命名空间的命名方法,目的是为了在同一个项目中,允许引用名字相同但由不同开发者提供的包。


(1)包版本

工具的稳定性对于项目至关重要,版本是连续迭代的。引入项目的时候,需要根据当前开发环境php版本,选择不同的library。

在实际开发中,可能会出现 版本号由 1.0.1 是1.0.0的一次小更新,1.1.0可能新增了一些功能 。但是到2.0的时候 ,也许和1.0.0的版本大不相同。


更多时候,版本2.0 会比1.0 拥有更多的功能 ,1.0 会比2.0更加稳定。

为了稳定性,可以升级到1.*.*的最新版本,但是不能升级到2.0


为了满足版本号的需求,composer提供了一些规范和对应表达式:


名称实例描述
确切的版本号1.0.2指定具体的版本号
范围有效运算符 >,>=,<,<=,!=

>=1.0
>=1.0,<1.2
>=1.0,<1.1|>1.3


通配符  *1.0.*等同于 >=1.0,<1.1
定义最小版本运算符 ~~1.2这是一个区间 等同于 >=1.2,<2.0
版本选择运算符
^1.2获取当前版本的稳定版


重点强调:~1.2 相当于 >=1.2<2.0 

                 ~1.2.1 相当于>=1.2.1<1.3.0


例如,~1.2 定义了最小的版本号,升级2.0以下的任何版本都不会出问题。


(2)开发版与稳定版


除了通过表达式来实现版本的约束外,还可以指定安装包的版本是开发版(dev)还是稳定版(stable),例如 默认都安装稳定版(stable),只需要在composer.json添加以下配置即可

"minimum-stability":"stable"


(3)手动安装第三方包


1、更新compser.json文件

composer.json文件格式是给予JSON,要求比较演这个,在手动更新json文件需要注意

《1》只支持双引号作为定义字符串。

《2》配置项最有一个不能有 “,” 符号


这里以安装medoo数据库扩展包为例:

使用了composer search 进行了下搜索,结果如下:

DELL@DESKTOP-HEOND63 MINGW64 /e/testgit (master)
$ composer search medoo
catfan/medoo The lightest PHP database framework to accelerate development
repat/laravel-medoo Laravel Facade and ServiceProvider for The Lightest PHP database framework to accelerate development
aryelgois/medools Wrapper on catfan/Medoo
hanhyu/wlsh-framework 运行环境:php 7.2.5 / nginx 1.14.0 / swoole 4.2.5 / yaf 3.0.7 / Mysql 8.0.11/ Redis 4.0.10 / inotify
ycrao/tinyme a tiny php framework based on flight and medoo.
threeletters/supersql SlickInject and Medoo on steroids - The most advanced and lightweight library of its kind.
wantp/medoo The lightest PHP database framework to accelerate development
shijianzhiwai/medoo The lightest PHP database framework to accelerate development
lmz/medoo The Lightest PHP database framework to accelerate development
jiaojie/medoo The lightest PHP database framework to accelerate development
jdelta/medoo The lightest PHP database framework to accelerate development
gandasani/medoo The Lightest PHP database framework to accelerate development
duamel/medoo The lightest PHP database framework to accelerate development
bhcosta90/medoo
bearlikelion/medoo-provider Service Provider for use of the Medoo ORM in the Autarky framework.

但是现在不通过 composer require 的方式安装,


通过编辑 composer.json 文件的形式进行配置,并安装。配置中需要指定版本号,通过 https://packagist.org/  进行下搜索,查看版本号

{
    "require": {
        "guzzlehttp/guzzle": "^6.3"
    }
}


加入sms-services 并指定版本号 1.1.1

{
    "require": {
        "guzzlehttp/guzzle": "^6.3",
	"girnarsoft/sms-services":"1.1.1"
    }
}


执行命令:

composer update


composer6.png

引入成功。



(4)composer install 和 composer update 的区别

   如果 当前目录下不存在 composer.lock 的时候 ,可以使用 composer install 命令安装。

   如果存在composer.lock文件的时候,composer install 就不能执行了,必须采用 composer update 这种方式进行更新。

   Run update to update them    



2、composer.lock文件

在安装更依赖后,composer将安装时确切的版本号写入composer.lock文件。


如果composer.lock 存在后,要更新版本信息的话,需 采用 composer  update 命令进行。




3、composer其他命令操作

composer  search

composer require

composer install

composer config 

composer show 



创建项目


1、依赖信息查看

查看当前项目中都有哪些依赖,可以执行以下命令

$ composer show
girnarsoft/sms-services 1.1.1
guzzlehttp/guzzle       6.3.3  Guzzle is a PHP HTTP client library
guzzlehttp/promises     v1.3.1 Guzzle promises library
guzzlehttp/psr7         1.5.2  PSR-7 message implementation that also provides common utility methods
psr/http-message        1.0.1  Common interface for HTTP messages
ralouphie/getallheaders 2.0.5  A polyfill for getallheaders.

我们可以看到  有多个的依赖。

 

查看 guzzlehttp/guzzle 依赖的详细信息,则需要执行以下命令:

composer show guzzlehttp/guzzle


composer7.png

可以看到详细的描述信息,版本号



2、依赖更新与composer版本更新


当需要获取最新的依赖版本时,可以使用以下命令

composer update


但是此命令会更新当前所有已经安装的依赖,所以当执行更新某一些依赖是,只需要指定依赖的包名即可:

composer update guzzlehttp/guzzle 


除了更新依赖,还可以更新composer的工具版本,需要执行下面命令:

composer self-update 

composer8.png


依照上图所示,工具版本更新成功。