composer

什么是composer

如果你知道yumapt-getnpmbower等命令中的一种或者多种,那么,你也能很快知道composer是什么了。没错,它就是PHP里快速安装类库的。平时,我们安装一个PHP类库,需要搜索->下载;使用composer,我们只要知道包名,直接composer insatll就可以了。

如果上面的你还不知道。那你就把composer想象成360软件管家

Composer是php项目中第三方包管理依赖工具。我们项目中只需要声明所依赖的第三方包名和版本,Composer就会自动下源代码下载到项目中,同时我们也可以将开发好的源代码上传到公司内部composer仓库,提供给项目组里的同事下载使用。如果你是一下乐于分享的好同学,那么你也可以将平时在开发的时候封装好的一些工具类上传到composer中央仓库,这样世界各地的程序员都可以下载你的源代码直接使用

一、安装使用

1、window下安装

自力更生

2、配置中国全量镜像

//将国外的github中央地址库改成中国全量镜像
composer config -g repo.packagist composer https://packagist.phpcomposer.com

3、添加一个monolog/monolog 1.23.0包

寻一个目录下创建composer.json文件

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

在命令提示符下键入:

composer install

使用时,安装惯例例把第三方的代码到一个指定的目录 vendor

require_once 'vendor/autoload.php';

use Monolog\Handler\StreamHandler;
use Monolog\Logger;
$log = new Logger('jack');
$log->pushHandler(new StreamHandler('your.log', Logger::WARNING));
$log->addWarning('这是我用来测试用的日志类库');

二、 composer.json项目安装

1、require Key

需要在 composer.json 文件中指定 require key 的值。你只需要简单的告诉 Composer 你的项目需要依赖哪些包。

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

所以:require 需要一个 包名称 (例如 monolog/monolog) 映射到 包版本 (例如 1.0.*) 的对象

包名称

它允许两个不同的人创建同样名为 json 的库,而之后它们将被命名为 igorw/jsonseldaek/json

包版本

我们引入的 monolog 版本指定为 1.0.*。这表示任何从 1.0 开始的开发分支,它将会匹配1.0.01.0.2 或者 1.0.20

2、安装依赖包

php composer.phar install

一个惯例把第三方的代码到一个指定的目录 vendor。如果是 monolog 将会创建 vendor/monolog/monolog 目录 另一件事是 install 命令将创建一个 composer.lock 文件到你项目的根目录中

composer.lock - 锁文件

锁文件非常重要的,因为 install 命令将会检查锁文件是否存在,如果存在,它将下载指定的版本(忽略 composer.json 文件中的定义)

任何人建立项目都将下载与指定版本完全相同的依赖。你的持续集成服务器、生产环境、你团队中的其他开发人员、每件事、每个人都使用相同的依赖,从而减轻潜在的错误对部署的影响。即使你独自开发项目,在六个月内重新安装项目时,你也可以放心的继续工作,即使从那时起你的依赖已经发布了许多新的版本

如果不存在 composer.lock 文件,Composer 将读取 composer.json 并创建锁文件

这意味着如果你的依赖更新了新的版本,你将不会获得任何更新。此时要更新你的依赖版本请使用 update 命令。这将获取最新匹配的版本(根据你的 composer.json 文件)并将新版本更新进锁文件

php composer.phar update

如果你愿意,可以在你的项目中提交 composer.lock 文件。他将帮助你的团队始终针对同一个依赖版本进行测试。任何时候,这个锁文件都只对于你的项目产生影响。

如果你不想提交锁文件,并且你正在使用 Git,那么请将它添加到 .gitignore 文件中

代码实例

require_once 'vendor/autoload.php';

use Monolog\Handler\StreamHandler;
use Monolog\Logger;
$log = new Logger('jack');
$log->pushHandler(new StreamHandler('your.log', Logger::WARNING));
$log->addWarning('这是我用来测试用的日志类库');

$markdown = '#hello';
$md = new cebe\markdown\Markdown();
$md = new cebe\markdown\GithubMarkdown();
echo $md->parse($markdown);