简介:Composer是PHP中的一个依赖管理工具. 它可以让你声明自己项目所依赖的库,然后它将会在项目中为你安装这些库。

Composer 是个工具,请到 https://getcomposer.org/网站下载安装。

Packagist 是composer的主要仓库网站,大家可以去看看,composer仓库的基础是包的源码,你可以随意的获取,Packagist的目的建成一个任何人都可以使用的仓库,这就意味着在你的文件中任意的require包了。

命令列表:

下述整理自此篇: Composer command line interface

• init: php composer.phar init
• install: php composer.phar install
• update: 
   
• php composer.phar update
• php composer.phar update vendor/package vendor/package2
• php composer.phar update vendor/*
• require: 
   
• php composer.phar require
• php composer.phar require vendor/package:2.* vendor/package2:dev-master
• search: php composer.phar search monolog
• show: 
   
• php composer.phar show
• php composer.phar show monolog/monolog
• php composer.phar show monolog/monolog 1.0.2
• depends: php composer.phar depends --link-type=require monolog/monolog
• validate: php composer.phar validate # It will check if your composer.json is valid
• status: php composer.phar status # php composer.phar status -v
• self-update: php composer.phar self-update
• Config: php composer.phar config --list
• Modifying Repositories: php composer.phar config repositories.foo vcs http://github.com/foo/bar
• create-project: php composer.phar create-project doctrine/orm path 2.2.0
• help: php composer.phar help install

用法:

  1. 创建文件: composer.json  写入要使用的套件名称、版本,此文件的作用主要用来声明包之间的相互关系和其他的一些元素标签。

{ "require": { "aws/aws-sdk-php": "2.*" } }

 

  1. json创建目录下通过cmd命令输入:composer install  下载安装
  2. 安裝完成后, 程序中加入 <?php require 'vendor/autoload.php'; ?> 就可以直接使用.

Composer.json的格式:

require 关键字

第一件事情在composer.json就是使用require关键字了,你将告诉composer哪些包是你项目所需要的

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

如你所见,require的对象将会映射包的名称( monolog/monolog)和包的版本是1.0.*

 

包的命名

基本上包的命名是 主名/项目名称( monolog/monolog),主名必须唯一,但是项目也就是我们的包的名称可以有相同的,例如: igorw/json,和seldaek/json

包的版本

我们需要使用monolog的版本是1.0.*,他的意思是只要版本是1.0分支即可,例如1.0.0,1.0.2或者1.0.99

版本定义的两种方式:

  1. 标准的版本:定义保准的版本包文件,如:1.0.2
  2. 一定范围的版本:使用比较符号来定义有效的版本的范围,有效的符号有>, >=, <, <=, !=
  3. 通配符特别的匹配符号*,例如1.0.*就相当于>=1.0,<1.1版本的即可
  4. 下一个重要的版本:~符号最好的解释就是,~1.2就相当于>1.2,<2.0,但~1.2.3就相当于>=1.2.3,<1.3版本。   

composer.lock - 锁定文件

在安装完所有需要的包之后,composer会生成一张标准的包版本的文件在composer.lock文件中。这将锁定所有包的版本。

使用composer.lock(当然是和composer.json一起)来控制你的项目的版本

这一点非常的重要,我们使用install命令来处理的时候,它首先会判断composer.lock文件是否存在,如果存在,将会下载相对应的版本(不会在于composer.json里面的配置),这意味着任何下载项目的人都将会得到一样的版本。

如果不存在composer.lock,composer将会通过composer.json来读取需要的包和相对的版本,然后创建composer.lock文件

这样子就可以在你的包有新的版本之后,你不会自动更新了,升级到新的版本,使用update命令即可,这样子就能获取最新版本的包并且也更新了你的composer.lock文件。

$ php composer.phar update 或者 $ composer update

关于自动加载

为了方便的加载包文件,Composer自动生成了一个文件 vendor/autoload.php,你可以方便只有的使用它在任何你需要使用的地方

require 'vendor/autoload.php';

这意味着你可以非常非常方便的使用第三方代码了,假设你的项目需要使用monlog,你直接使用吧,他们都已经自动加载了的!

$log = new Monolog\Logger('name'); $log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING)); $log->addWarning('Foo');

当然你也可以在composer.json中加载自己的代码:

{ "autoload": { "psr-0": {"Acme": "src/"} } }

composer将会把psr-0注册为Acme的命名空间

你可以定义一个映射通过命名空间到文件目录,src目录是你的根目录,vendor是同一级别的目录,例如一个文件为:src/Acme/Foo.php就包含了Acme\Foo类

当你在增加autoload之后,你必须要重新install来生成vendor/autoload.php文件

在我们引用此文件的时候,将会返回一个autoloader类的实力,所以你可以把返回的值放入一个变量,然后在增加更多的命名空间,如果在开发环境下这是非常方便的,例如:

$loader = require 'vendor/autoload.php'; $loader->add('Acme\Test', __DIR__);