composer note

简介

composer 是php的依赖管理工具。可以声明项目所依赖的库,composer会帮我们安装上
composer 默认基于项目来管理和安装库(包),将依赖的库安装到项目的 vendor 文件夹中,默认地不全局安装任何库。

composer之于php, 类似 npm之于nodejs,bundler之于ruby

一个例子 composor.json 描述项目依赖的库

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

composer要求 php5.3.2+, 代码仓库(git/svn/hg)

安装

windows下安装 composer

  • 自动安装
    下载并运行 composer-setup.exe,将会安装composer并设置path
  • 手动安装
    切换到工作目录,然后执行以下命令下载composer.phar
C:\bin>php -r "readfile('https://getcomposer.org/installer');" |php
  //C:\bin 在path设置中
  //创建快速启动的批处理文件
  C:\bin>echo @php -r "readfile('https://getcomposer.org/installer');" | php
  //打印版本号 验证是否成功安装
  C:\bin>composer -V

使用

  1. 下载依赖库
//composer会查找 composer.json 文件,安装json文件描述的依赖    
 php composer.phar install
 //若全局安装了 composer, 则可以执行下面的命令
 composer install

 //查看帮助
 php composer.phar -h
  • 自动加载依赖的库 autoload.php处理下载依赖库之外,composer同时提供了自动加载依赖库的功能. 如:
require __DIR__ . '/verdor/autoload.php'

;


;

composer基本用法

1. composer.json

composer.json 描述了项目所依赖的库和其他元数据

composer.json 示例:

{
    "require": {
        "monolog/monolog": "1.0.*"  // verdorName/projectName: version
    }
}

包的版本号:

  1. 准确的版本号 如: 1.0.2
  2. 比较运算符表示版本范围 如: >=1.0 >=1.0 <2.0(空格或,表示and) >=1.0 <1.1 || >1.2(||表示or)
  3. 破折号表示版本范围 如: 1.0 - 2.0 等价于(>=1.0.0 <2.1) 等价于( 1.0.* - 2.0.*)
  4. 用通配符表示版本范围 如: 1.0.* 等价于(>=1.0.0 <1.1)
  5. 波浪线表示版本范围 如: ~1.2 等价于(>=1.2 <2.0) ~1.2.3 等价于(>=1.2.3 <1.3.0)
  6. 脱字符表示范围 如: ^1.2.3 等价于(>=1.2.3 <2.0)

注意: ~1.2.3 和 ^1.2.3 之间的差别

安装依赖:
把composer.json文件描述的依赖安装到项目中

//在命令行下 cd到 composer.json所在目录
php composer.phar install

安装完依赖之后,composer会将它所安装的确切的版本信息写入composer.lock文件中

composer.lock确保其他人安装时也是下载相同版本的依赖库

//更新依赖库并更新composer.lock文件
php composer.phar update
//只是更新其中1个依赖库 可以这样
php composer.phar update monolog/monolog

packagist

packagist是主要的composer代码仓库,简单的说就是镜像源。 packagist官网

autoload.php

require 'vendor/autoload.php';

//这里可以直接使用依赖,不必理会依赖到底在哪里
//autoload.php负责帮我们找到并加载依赖
$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log',Monolog\Logger::WARNING);
//...stuff