#composer是什么
Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。
composer出现之前我们php项目依赖管理大部分都是手动管理,(当然也可能会用到pear,pear是全局安装的)。
 
#Composer 解决了那些问题
a) 你有一个项目依赖于若干个库。
b) 其中一些库依赖于其他库。
c) 你声明你所依赖的东西。
d) Composer 会找出哪个版本的包需要安装,并安装它们(将它们下载到你的项目中)。


#系统要求
windows,linux,osx
php5.3.2+
git,svn,hg (取决于依赖包用的版本控制)
 
#安装
windows:
     设置环境变量,任何目录下可直接用  composer  命令;
 
*inux
     curl -sS https://getcomposer.org/installer | php -- --install-dir=bin
     mv composer.phar /usr/local/bin/composer
     ( composer.phar 是composer的二进制执行程序,是一个phar包 )
 
MAC
     推荐brew安装
     brew update
     brew tap josegonzalez/homebrew-php
     brew tap homebrew/versions
     brew install php55-intl
     brew install josegonzalez/php/composer
 
安装完成之后,-v选项查看详情

#使用

composer依赖管理通过  composer.json 文件配置依赖关系。
 
json结构,最重要的key是 require  定义依赖关系;
{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}
结构是     包名 :版本
包名格式:供应商/包名  这种结构的好处是运行多个人开发相同的包名,通过供应商名称区分
版本:

~1.2 理解 >= 1.2, <2.0    最后一个点后面的可以变   ~1.2.3   >=1.2.3, < 1.3

 
依赖关系配置好之后: composer install  会安装包到  vendor/包名 目录下    vendor目录推荐放在版本控制外(.gitignore)   如下:

同时会写一个 composer.lock 文件,里面详细记录安装的版本信息,composer.lock 和  composer.json这两个文件必须加入版本控制中,这样别人初始化项目的时候就会读取lock文件安装指定的版本,即使依赖包有新版本发布,降低了部署风险。(install程序首先检查有没有lock文件)

composer install 运行过程:

由于有墙,这2个站访问不是很稳定,即使能访问到速度也很慢,强烈推荐  composer中国全量镜像  项目composer.json中加入如下配置:
"repositories": {
    "packagist": {
        "type": "composer",
        "url": "https://packagist.phpcomposer.com"
    }

}
 详细参考官网:http://pkg.phpcomposer.com/
 
更新依赖包:
     php composer.phar update
只跟新一个包
     php composer.phar update monolog/monolog [...]
 
#自动加载
composer为我们做好了自动加载的操作,项目中我们只需要引入即可:
     require 'vendor/autoload.php';
也可以定义自己的autoload:
     "autoload": {
            "classmap": [
                 "database"
            ],
            "psr-4": {
                 "App\\": "app/"
            }
     }
注册一个psr-4的autoload到App的命名空间,App命名空间映射到目录app 和vendor同级,修改autoload后必须重新运行
composer install  以便重新生成autoload.php
 
composer dumpautoload

# 包
只要一个文件夹里包含 composer.json 它就是一个包,如果定义了一个require这是一个依赖于其他包的包。
项目本身就是一个包  只是没有名字  通过 composer.json 中的 name 来定义 
{
    "name": "acme/hello-world",
    "require": {
        "monolog/monolog": "1.0.*"
    }

}
#平台软件包
不是由composer安装的包视为平台软件包,如php本身  通过下面命令查看
 
输出结果中出现的限制都可以用于定义依赖
 

# 使用composer管理项目
背景:团队里有自己的框架,库。现在需要做一个新项目。这时候可以使用composer管理
 
步骤一
     把公共的框架和库做成一个composer包, push到git上(svn也行)能访问到就行
      
步骤二
    在我们新项目的composer.json中,定义依赖
     
步骤三
    执行  composer  install 这个时候项目依赖就会自动安装。
 
最终目录结构如下:
 
如果打算开源某个公共库,可以发布到 composer的packageist   地址:https://packagist.org/    提交项目就行;
 

# yii2 分析
目前主流php框架新版本都开始composer,如 yii2,laravel等;
{
    "name": "yiisoft/yii2-app-basic",  // 包名称  供应商/项目名  必须
    "description": "Yii 2 Basic Project Template", // 包描述  最长一行  对于要发布的包是必须字段
    "keywords": ["yii2", "framework", "basic", "project template"], //该包相关的关键词的数组。这些可用于搜索和过滤  可选
    "homepage": "http://www.yiiframework.com/",  // 该项目网站的 URL 地址  可选
    "type": "project",  // 包的安装类型,默认为 library 简单复制到vendor中。 project这表示当前包是一个项目,而不是一个库
    "license": "BSD-3-Clause", // 许可协议
    "support": {  // 获取项目支持的向相关信息对象
        "issues": "https://github.com/yiisoft/yii2/issues?state=open",
        "forum": "http://www.yiiframework.com/forum/",
        "wiki": "http://www.yiiframework.com/wiki/",
        "irc": "irc://irc.freenode.net/yii",
        "source": "https://github.com/yiisoft/yii2"
    },
    "minimum-stability": "stable", // 这定义了通过稳定性过滤包的默认行为
    "require": {
        "php": ">=5.4.0",
        "yiisoft/yii2": ">=2.0.5",
        "yiisoft/yii2-bootstrap": "*",
        "yiisoft/yii2-swiftmailer": "*"
    },
    "require-dev": { // 这个列表是为开发或测试等目的,额外列出的依赖
        "yiisoft/yii2-codeception": "*",
        "yiisoft/yii2-debug": "*",
        "yiisoft/yii2-gii": "*",
        "yiisoft/yii2-faker": "*"
    },
    "config": { // 仅用于项目
        "process-timeout": 1800 // 处理进程结束时间
    },
    "scripts": { // Composer 允许你在安装过程中的各个阶段挂接脚本
        "post-create-project-cmd": [
            "yii\\composer\\Installer::postCreateProject"
        ]
    },
    "extra": { // 任意的,供 scripts 使用的额外数据
        "yii\\composer\\Installer::postCreateProject": {
            "setPermission": [
                {
                    "runtime": "0777",
                    "web/assets": "0777",
                    "yii": "0755"
                }
            ],
            "generateCookieValidationKey": [
                "config/web.php"
            ]
        },
        "asset-installer-paths": {
            "npm-asset-library": "vendor/npm",
            "bower-asset-library": "vendor/bower"
        }
    }
}

#常用命令
composer init  以交互的方式创建 composer.json
 
composer install  处理依赖关系,安装到vendor下
 
composer update 获取最新版本,并更新lock文件
 
composer search 搜索依赖
 
composer validate 有效性检查
 

更多信息参考官方手册。
 
 

composer php依赖管理工具的更多相关文章

  1. Composer PHP 依赖管理工具

    composer 是 PHP 用来管理依赖(dependency)关系的工具.你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件. 依赖管理 ...

  2. Composer : php依赖管理工具

    原始时代 我记得在当时用php的时候还没有composer,只有个pear,但是不好用呀,还不如直接在互联网上到处复制代码了,更快更不容易出错,当时也没有github这么好的社区工具了 总结如下 代码 ...

  3. PHP的依赖管理工具----composer

    安装Composer 参考:https://getcomposer.org/doc/01-basic-usage.md composer 是PHP依赖管理工具 PHP最低版本要求5.3.2,需要允许o ...

  4. 有用PHP依赖管理工具Composer新手教程

    PHP依赖管理工具Composer新手教程 Composer 是 PHP 的一个依赖管理工具.它同意你申明项目所依赖的代码库,它会在你的项目中为你安装他们. 依赖管理 Composer 不是一个包管理 ...

  5. PHP依赖管理工具Composer入门

    作者: JeremyWei | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址: http://weizhifeng.net/manage-php-dependency-wi ...

  6. Go 包依赖管理工具 —— govendor

    govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具.与原生 vendor 无侵入性融合,也支持从其他依赖管理工具迁移,可以很方便的实现同一个包在不同项目中不同版本.以及 ...

  7. PHP之Composer类库依赖管理神器

    Composer中文版说明见:https://github.com/kaka987/Composer-zh Composer 是PHP的类包依赖管理工具,用它可以轻松的引用第三方类包,类似于node的 ...

  8. yarn依赖管理工具的使用

    Yarn是Facebook发布的一款依赖管理工具,它比npm更快.更高效. 与NPM命令对照 npm install => yarn install npm install --save [pa ...

  9. Golang依赖管理工具:glide从入门到精通使用

    这是一个创建于 2017-07-22 05:33:09 的文章,其中的信息可能已经有所发展或是发生改变. 介绍 不论是开发Java还是你正在学习的Golang,都会遇到依赖管理问题.Java有牛逼轰轰 ...

随机推荐

  1. [React Native] Using the WebView component

    We can access web pages in our React Native application using the WebView component. We will connect ...

  2. pomelo 开发环境搭建

    开发前提条件:  Windows系统,请确保你的Windows系统包括源代码编译工具.Node.js的源代码主要由C++代码和JavaScript代码构成,可是却用gyp工具来做源代码的项目管理,该工 ...

  3. 文件I/O(不带缓冲)之I/O的效率

    程序清单3-3中的程序使用read和write函数复制文件.关于该程序应注意下列各点: 它从标准输入读,写至标准输出,这就假定在执行本程序之前,这些标准输入.输出已由shell安排好.确实,所有常用的 ...

  4. Android市场官方的统计信息

    做Android应用和游戏,避免不了的要了解市面上的各种android设备的信息,以最大程度的兼容更多的设备. Android市场会定期发布统计信息,包括SDK版本,屏幕大小和分辨率,OpenGL E ...

  5. Android学习之Activity初步

    Activity作为Android的第一步接触的概念,在学习中将初步的认识总结下来,以便后续的回顾与反思. 1.在用Android Studio生成第一个helloworld应用程序运行在手机上时,发 ...

  6. Web安全测试周末公开班计划5月24、25日开课,欢迎报名参加!

    Web安全测试周末公开班计划5月24.25日开课,欢迎报名参加! 课程大纲参考: http://gdtesting.com/product.php?id=107 报名咨询: 黎小姐 QQ:241448 ...

  7. Redis命令参考(Keys & String)

    r = redis.Redis(ip, port, index) 如此实例化一个redis对象,index取值0-15,一个redis对象有16个库. Keys 函数 功能 返回值 备注 keys(s ...

  8. 关于JFace中的进度条对话框(ProgressMonitorDialog类)

    在Windows操作系统中,最常用的进度条对话框就是文件复制时的弹出框,如果想让用户愉快的使用你开发 的软件,那么在执行某个较长时间的操作时候,就应该弹出一个进度条提示框,告诉用户程序正在做什么. 做 ...

  9. highcharts 24小时显示数据,显示00:00格式的数据

    Showing 24 hours on xAxis WITHOUT a date on 00:00 格式参考PHP手册中的: strftime

  10. JAXB - Annotations, Annotation for Classes: XmlType

    This annotation adds information that would be available from a schema type, but isn't implied by a ...