#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. [AngularJS] Accessible Button Events

    Often buttons need to be handled by JavaScript, and if done improperly it can lead to accessibility ...

  2. 再探ASP.NET 5(转载)

    就在最近一段时间,微软又有大动作了,在IDE方面除了给我们发布了Viausl Studio 2013 社区版还发布了全新的Visual Studio 2015 Preview. Visual Stud ...

  3. Java基础知识强化之多线程笔记03:进程与线程 和 多线程的意义

    1. 要想了解多线程,必须先了解线程,而要想了解线程,必须先了解进程,因为线程是依赖于进程而存在. 2. 什么是进程? 通过任务管理器我们就看到了进程的存在. 而通过观察,我们发现只有运行的程序才会出 ...

  4. MySQL(7):数值类型

    1. 数值类型  

  5. MySQL(1):启动MySQL服务,客户端连接服务

    1.安装完毕mysql之后,在windows中找到服务,启动MySQL服务(服务端)(mysqld.exe) 2.接下来启动客户端(mysql.exe) 这里参数中: -hlocalhost 表示主机 ...

  6. Windows系统下用命令行编译C/C++程序过程总结

    转自:http://www.cnblogs.com/caikehe/archive/2013/01/12/2858017.html (1)先用记事本编写如下所示的代码,并另存为hello.cpp,假设 ...

  7. Android_AsyncTask_DownloadImg_progressDIalog

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...

  8. About gpref O(n2) --> O(1)

    http://www.ibm.com/developerworks/cn/linux/l-gperf.html 命令行处理和 gperf 的作用 命令行处理一直以来都是软件开发中最容易被忽视的领域.几 ...

  9. 对于 NSLayoutConstraint 不执行动画的处理:

    在开发中  我们有时候需要改变某个空间的约束条件 也就是更改NSLayoutConstraint的值  (比如说我想在键盘顶部增加一个工具栏 让工具栏随着键盘的位置变化而变化  有一个动画效果)但是发 ...

  10. NoSQL选型

    传统“关系型数据库”在应付互联网WEB2.0应用已显示的力不从心,由其是超大规模和高并发的SNS类型的WEB2.0网站.主要需要应对以下三方面难题: 1.对数据库高并发读写的要求. 2.对数据库高可扩 ...