来自http://blog.sina.com.cn/s/blog_6262a50e0101b5ut.html

简介

composer是PHP中的一个依赖关系管理工具。只要(按指定格式)声明项目所依赖的库,composer就可以为我们安装这些库。

依赖关系管理

composer不是包管理器。不错,它处理“包”或库,但他的管理基于单个项目,它把库安装到项目中的一个目录中(例如:vendor)。缺省情况下,composer从不在全局范围安装任何东西。因此,composer是一个依赖关系管理器。

这并不是种全新的思想,composer受到node的npm和ruby的bundler的启发。但对PHP来说,还没有这样的工具。

composer要解决的问题是:

l         我们有一个项目,依赖好几个库。

l         这些库中某些又依赖于别的库。

l         我们声明我们依赖的库

l         composer找到需要安装哪个包的哪个版本,并安装(这意味着composer把他们下载到我们的项目中)。

声明依赖关系

假定我们创建了一个项目,需要一个库做日志记录。我们决定使用monolog。为了把monolog加到项目中,我们只需要创建一个描述项目依赖关系的文件composer.json。

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

这里只需简单地说明我们的项目需要某个monolog/monolog包,以1.0开始的任何版本都可以。

安装

本地下载

要获取composer,我们需要做两件事。第一件是安装composer(再说一遍,把它下载到我们的项目目录中):

$ curl –s https://getcomposer.org/installer | php

这个命令会检查PHP的几个设置然后把composer.phar下载到我们的工作目录。这个文件是composer程序。它是一个PHAR(PHP archive),PHAR是PHP的一种文档格式,可以在命令行运行。

通过--install-dir选项,可以把composer安装到指定目录中(可以是绝对路径,也可以是相对路径):

$curl –s https://getcomposer.org/installer | php -- --install-dir=bin

全局下载

这个文件可以放在任何地方。如果把它放在PATH指定的路径中,就可以全局访问了。在unix类的系统中上,可以把它变成可执行文件,运行时可以不指定php。

$ curl -s https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer

然后,运行composer时只需运行composer。

使用composer

下一步,运行install命令来解析和下载依赖库:

php composer.phar install

这个命令会把monolog下载到vendor/monolog/monolog目录中。

自动加载

除了下载库之外,composer还准备了一个自动加载文件,可以自动加载它下载的库中的所有类。要使用自动加载,只要在代码的引导过程中加上:

require 'vendor/autoload.php';

好了,开始使用monolog吧!要学习composer的更多知识,请阅读“基本用法”一章。

基本用法:http://docs.phpcomposer.com/01-basic-usage.html

来自http://blog.csdn.net/think2me/article/details/38456931

使用composer.json来加载和下载类库源码
 
我们已经找到了monolog的加载master路径了。那么我们怎么搞到我们的项目中的。我们需要借助于composer.json文件来帮我们,说到composer.json,我们就不得不说nodejs中的package.json,如果我们知道package.json。我们就完全能了解composer.json的作用了。它是一个代码依赖的约束文件,格式是json格式。通过这个文件我们用composer install 命令时,他会自动去下载里面的约束关系。
 
好。那我们把我们需要的monglog加进来,需要用require 字段:
 
{
"require": {
"monolog/monolog": "1.11.*@dev"
}
}

你可以看到, require 需要一个 包名称 (例如 monolog/monolog) 映射到 包版本 (例如 1.11.*@dev) 的对象。

 
我们就写这一个最简单的require,我们保存composer.json。然后我们打开命令行工具,使用命令:composer install 
 
$ composer install

命令执行完成后,就开始自动下载了,我们打开文件夹:

 
 
文件结构是:vendor文件夹+composer.lock+composer.json。我们过会说composer.lock是干嘛的有什么用。我们点击vendor进去:
 
里面是一个一个类库文件夹,有我们需要的mongolog,还有一个psr是在mongolog里面的composer.json里reqiure了,所以一起下载了。从这里可以看出用composer的好处了,就是一层一层的依赖关系都能加载进来,很强大很方便。
 
我们注意到里面有个autoload.php找个我们也是在后面来说,它是一个自动加载类库,很强大,我们只需要加载找个文件,就能自动加载使用其他的类库了,不需要再手动加载。
 
 
3. composer.lock是干嘛的?
 
我们注意到了,composer install 的时候,系统自动帮我们新建一个composer.lock文件,那这个锁文件是干嘛的呢?
 
我们可以打开这个文件,看看里面写的是什么。打开后,我们发现这几乎和composer.json是一样的格式和数据,也是各种约束关系,require文件等。
 
在安装依赖后,Composer 将把安装时确切的版本号列表写入 composer.lock 文件。这将锁定改项目的特定版本。以后就会以这个版本为主,只要有这个文件在,就会忽略所有的composer.json文件。这是非常重要的,因为 install 命令将会检查锁文件是否存在,如果存在,它将下载conposer.lock指定的版本(忽略 composer.json 文件中的定义)。
 

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

我们想想这样有什么作用呢?假设一个场景,多人开发,肯定会有人新的人开发完成将要后续开发,那么他肯定会去更新composer.json的依赖关系,那么其他人更新后,也会同样去更新,这样就乱了。他本来不想去更新,只想用原来的。所以有个这个composer.lock 文件,所有的人都会用一样的依赖关系版本。等全部都开发好了。再将这个composer.lock文件删掉就可以了。

这意味着如果你的requie的依赖更新了新的版本,你也不会获得任何更新。因为有composer.lock文件存在,此时要想更新你的依赖版本请使用 update 命令。这将获取最新匹配的版本(根据你的 composer.json 文件)并将新版本更新进锁文件composer.lock
 
如果我们确实需要更新依赖呢?我们可以使用 update 命令,它将重新生成lock文件
 
$ composer update

如果只想安装或更新一个依赖,你可以这样单独更新它:

$ composer update monolog/monolog [...]

4. 包版本的规则是啥

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

版本约束可以用几个不同的方法来指定。

名称 实例 描述
确切的版本号 1.0.2 你可以指定包的确切版本。
范围 >=1.0 >=1.0,<2.0>=1.0,<1.1|>=1.2 通过使用比较操作符可以指定有效的版本范围。 
有效的运算符:>>=<<=!=。 
你可以定义多个范围,用逗号隔开,这将被视为一个逻辑AND处理。一个管道符号|将作为逻辑OR处理。 
AND 的优先级高于 OR。
通配符 1.0. 你可以使用通配符来指定一种模式。1.0.*>=1.0,<1.1是等效的。
赋值运算符 ~1.2 这对于遵循语义化版本号的项目非常有用。~1.2相当于>=1.2,<2.0。想要了解更多,请阅读下一小节。

5. 下一个重要版本(波浪号运算符)

~ 最好用例子来解释: ~1.2 相当于 >=1.2,<2.0,而 ~1.2.3 相当于 >=1.2.3,<1.3。正如你所看到的这对于遵循 语义化版本号 的项目最有用。一个常见的用法是标记你所依赖的最低版本,像 ~1.2 (允许1.2以上的任何版本,但不包括2.0)。由于理论上直到2.0应该都没有向后兼容性问题,所以效果很好。你还会看到它的另一种用法,使用 ~ 指定最低版本,但允许版本号的最后一位数字上升。

默认情况下只有稳定的发行版才会被考虑在内。如果你也想获得 RC、beta、alpha 或 dev 版本,你可以使用 稳定标志。你可以对所有的包做 最小稳定性 设置,而不是每个依赖逐一设置。

6. 在我们自己的php项目中使用
 
既然代码库都下载好了。那么我们就应该可以使用了。前面说过,在vendor文件夹下面有一个autoload.php文件,这个文件有大大的用户,他是一个自动加载的文件,我们只要加载了它,那么我们就相当于讲其他的类库文件都加载了:
 
require 'vendor/autoload.php';

我们在对的路径加载这一句就可以了。比如,我们在加载了这一句后,想调用mongolog,我们就可以直接用了,不需要另外加载它:

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

很方便。

 
7. composer的其他用法
 
一般我们使用composer.json来下载第三方类库,用require 'vendor/autoload.php';使用它。当然composer的使用远远不止于此
 
我们可以直接敲入用composer命令,就会出现一个composer的命令list:
 
   ______ 
  / ____/___  ____ ___  ____  ____  ________  _____ 
/ /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ 
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ / 
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ 
                    /_/ 
Composer version 0209bd31a0ac3aeb2a68fc81e2d03c71072bef33 Usage: 
  [options] command [arguments] Options: 
  –help           -h Display this help message. 
  –quiet          -q Do not output any message. 
  –verbose        -v Increase verbosity of messages. 
  –version        -V Display this application version. 
  –ansi              Force ANSI output. 
  –no-ansi           Disable ANSI output. 
  –no-interaction -n Do not ask any interactive question. 
  –profile           Display timing and memory usage information 
  –working-dir    -d If specified, use the given directory as working directory 
. Available commands: 
  about            Short information about Composer 
  archive          Create an archive of this composer package 
  config           Set config options 
  create-project   Create new project from a package into given directory. 
  depends          Shows which packages depend on the given package 
  diagnose         Diagnoses the system to identify common errors. 
  dump-autoload    Dumps the autoloader 
  dumpautoload     Dumps the autoloader 
  help             Displays help for a command 
  init             Creates a basic composer.json file in current directory. 
  install          Installs the project dependencies from the composer.lock file 
if present, or falls back on the composer.json. 
  list             Lists commands 
  require          Adds required packages to your composer.json and installs the 

  run-script       Run the scripts defined in composer.json. 
  search           Search for packages 
  self-update      Updates composer.phar to the latest version. 
  selfupdate       Updates composer.phar to the latest version. 
  show             Show information about packages 
  status           Show a list of locally modified packages 
  update           Updates your dependencies to the latest version according to 
composer.json, and updates the composer.lock file. 
  validate         Validates a composer.json

这里面有很多命令,我们可以一个个的尝试下看看。最常用的就是create-project命令了,我们常见的框架symfony 和 Laravel 框架就是这种方式的:

 
composer create-project laravel/laravel your-project-name 2.1.2
composer create-project symfony/framework-standard-edition  your-project-name  2.1.2

8. composer的一些常用的命令:

 

composer list 列出所有可用的命令
composer init 初始化composer.json文件(就不劳我们自己费力创建啦),会要求输入一些信息来描述我们当前的项目,还会要求输入依赖包
composer install 读取composer.json内容,解析依赖关系,安装依赖包到vendor目录下
composer update 更新最新的依赖关系到compsoer.lock文件,解析最新的依赖关系并且写入composer.lock文件
composer search packagename 搜索包,packagename替换为你想查找的包名称
composer require packagename 添加对packagename的依赖,packagename可修改为你想要的包名称
composer show packagename
composer self-update 更新 composer.phar文件自身
composer command --help 以上所有命令都可以添加--help选项查看帮助信息

Composer的学习的更多相关文章

  1. php composer的学习之路(一)

    composer的介绍请看这里  http://docs.phpcomposer.com/00-intro.html composer的安装过程我就不介绍了,windows系统下跟其他安装没区别,一直 ...

  2. Composer 的学习

    一.Composer简介 Composer 是PHP用来管理依赖关系的工具. 使用 composer 的必要前提有: 1.PHP版本要高于PHP5.3.2 2.PHP支持OpenSSL扩展 3.安装有 ...

  3. composer安装学习

    Packagist 镜像 网站地址 http://www.phpcomposer.com/ 请各位使用本镜像的同学注意: 本镜像已经依照 composer 官方的数据源安全策略完全升级并支持 http ...

  4. composer的安装和使用 学习日志

    如果你做为一个phper,没有用过composer,那你真的不是一个合格的开发者.那么就来记录一下composer的学习日志 下面分享几个学习源头: composer中文网站:https://www. ...

  5. Yii2的相关学习记录,下载Yii2(一)

    原先学习过Yii1的相关知识,虽然也是半懂不懂的,但稍微的结构是了解的.现在利用晚上的时间学习下Yii2的使用,打算建一个后台管理系统,这里记录下,以免自己以后忘记. 目前已看一部分Yii2的权威指南 ...

  6. composer Failed to decode zlib stream 无法解码zlib流

    Win7 中安装 Composer (PHP) 国内有些网络不能访问美国的Composer官网,可访问 Composer 中文网 学习. 目标 可以在任何目录下的项目中执行 PHP composer. ...

  7. Composer 学习笔记

    Composer 是 PHP 的一个依赖管理工具(据说是最优秀的).它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们.目前很多项目以Composer 作为依赖管理工具,目前正在学习yii2 ...

  8. composer 学习资料

    今天看了一下composer,前几天开始用包依赖,以前一直都是自己手动配.今天用了composer,要学习的话可以按照以下链接学习: 1 官方文档: http://www.phpcomposer.co ...

  9. composer 学习与推荐资料

    今天看了一下composer,前几天开始用包依赖,以前一直都是自己手动配.今天用了composer,要学习的话可以按照以下链接学习: 1 官方文档: http://docs.phpcomposer.c ...

随机推荐

  1. lava.lang.String数据转换为java.sql.Date

    在JavaWeb编程中,往往涉及数据库,javaBean,前端数据数据类型不一致的问题 数据库和javaBean之间可以直接选择相对应的数据类型,而serverlet从前端获取的数据往往是String ...

  2. 九度OJ1020-最小正方形-判大小

    题目1020:最小长方形 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:7410 解决:3521 题目描述:     给定一系列2维平面点的坐标(x, y),其中x和y均为整数,要求用一个 ...

  3. PS不显示图片

    最近安装Adobe AIR的时候因为安装不了,删除了相关的配置文件,安装了Adobe AIR之后,用PS打开图片的时候发现不显示图片了,如图: 最后通过万能的百度了解到了是笔记本都采用了双显卡(i3. ...

  4. Washing Text Animation

    https://www.youtube.com/watch?v=q0_koJLc0OgBlender Tutorial: Washing Text Animation 需要用到插件, 进入用户设置的插 ...

  5. 两道dp

    链接:https://ac.nowcoder.com/acm/contest/186/C?&headNav=www 来源:牛客网终于Alice走出了大魔王的陷阱,可是现在傻傻的她忘了带武器了, ...

  6. 【Wannafly挑战赛14C可达性】【Tarjan缩点】

    链接:https://www.nowcoder.com/acm/contest/81/C来源:牛客网 题目描述 给出一个 0 ≤ N ≤ 105 点数.0 ≤ M ≤ 105 边数的有向图,输出一个尽 ...

  7. 《DSP using MATLAB》Problem 5.3

    这段时间爬山去了,山中林密荆棘多,沟谷纵横,体力增强不少. 代码: %% +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

  8. 【shell编程】之基础知识-基本运算符

    Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 ...

  9. src-d engine 强大的git 历史分析工具

    src-d engine 包含了Babelfish ,同时可以看作是Babelfish 的升级版本,我们可以使用sql 进行代码分析 备注: 注意运行的时候需要容器支持 使用 安装docker   参 ...

  10. tailor multi fragment && cutom-amd script demo 说明

    tailor 官方demo 中提供了一个multi fragment 的demo,这个比较简单,就是使用不同的 后端server 做为fragment ,然后使用 html tag 进行加载就可以了. ...