
#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"
}
}
}
"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 有效性檢查
更多信息參考官方手冊。