Composer中文教程

2019-06-26 16:04:00
linefo
原创
646


Composer 是 PHP 的一个依赖管理工具。

目的主要有:(1)方便的下载代码资源,并将其放置一个“库”中,便于管理(2)实现更新非常简单(3)因为有统一的放置规则,各种代码资源就不会放置混乱


Composer是专属于PHP的依赖管理工具,但并不是PHP独有的概念,在其他语言中早就有了这种方式去管理第三方代码资源,PHP只是借鉴过来按自己的方式实现而已。

Composer是多平台的,在Win、Linux和OSX都可以运行。


PS:

Win10下安装Composer:http://www.linefo.com/index.php/article/66.html


1、理解Composer的工作方式


(1)关于composer的安装

默认进行的是全局安装,安装以后,composer的目录结构如下:

先说composer.phar,这是一个phar格式的归档文件,安装主要是生成这个。

归档文件类似我们理解的压缩文件,相当于一个多文件打包成的一个应用,和普通压缩文件不同的是,php程序可以直接使用归档文件,而不需要进行类似解压的操作。

composer.phar里面有一个源(可以指定不同的源),源包括了各个应用/库/资源包的网络地址。

第一、第二个文件猜测是为了解决全局使用composer命令的问题。


(2)简单使用

一般在项目里我们会有一个composer.json,里面用类似配置的方式配置该项目依赖的资源包。然后我们在项目目录下使用 composer update 更新依赖关系。

PS:composer.json基本格式( monolog/monolog 就是指一个资源包,后面的 1.0.* 是版本信息)


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

执行成功后,我们会看到项目目录下的vender目录里面会多出资源包的目录(vender目录是默认放资源包的目录,没有的话会新生成它,并且多一些基本文件/目录)。

接着发现项目目录还多了一个composer.lock文件。


(3)composer update和composer install的区别

前面我们说到多了一个composer.lock文件,composer update和composer install的区别基本就和它有关系。

先说结论,update > install。

update的工作方式是,只考虑composer.json的require里面指定了什么资源包,然后在项目里面去下载或者更新这些资源包。然后把该次update操作涉及的和资源包的关系写入composer.lock。

install的工作方式是,根据composer.lock的内容去下载或者更新这些资源包(如果没有composer.lock文件,工作流程和update一致,最后也会生成一个composer.lock),在存在composer.lock文件的情况下,是不考虑composer.json里面的require指定了什么资源包的。


(4)命令使用和composer.phar

其实composer update命令,其实就是命令php composer.phar update。

如果你把composer.phar放到项目下,就可以这么用了。

然后调用composer.phar文件去进行项目和资源包依赖的管理

因为用了全局安装,所以就可以直接用composer update这样的方式。

至于为何可以不使用php命令便可执行phar归档文件,这个肯定是做了一些特殊处理了。。。。


2、composer.json文件解析

先给一个示例:


{
  "name": "test-deomo",
  "type": "project",
  "description": "5555555555",
  "require": {
    "php-curl-class/php-curl-class": "~7.4.0",
    "monolog/monolog": "~1.24.0",
    "qiniu/php-sdk": "~7.2.2",
    "vlucas/phpdotenv": "^2.5",
    "squizlabs/php_codesniffer": "2.3.0",
    "alibabacloud/client": "^1.5",
    "phpoffice/phpspreadsheet":"~1.6.0",
    "firebase/php-jwt": "^5.0",
	"endroid/qr-code": "3.6.0"
  }
}


主要讲require的:

首先是左边的包名,规则目前好像都是用一个斜杠分隔开来。

右边的版本信息:

~1.2 相当于 >=1.2,=1.2.3,<1.3


暂时就到这里了

文章分类
联系我们
联系人: Mr.Chen
QQ: 185391277