composer原理
composer主要基于spl_autoload_register呛占。
在執(zhí)行了“composer install”后敢朱,composer先將在https://packagist.org/上依賴的包下載到vendor目錄中功舀,然后將所有依賴包的枚舉寫到vendor/composer/autoload_static.php中殖属,再通過spl_autoload_register注冊(cè)到SPL __autoload函數(shù)棧中即可颁糟。
composer.json添加模塊
我們需要在 composer.json 文件中指定 require key 的值,以明確你的項(xiàng)目需要依賴哪些包铺董。
- composer.json的最小demo
{
"require": {
"monolog/monolog": "1.0.*"
}
}
-
示例工程
- 加入對(duì)本工程其他目錄下所有class的依賴
對(duì)ezSQL的依賴,則需要添加如下:
"name": "marsthink",
"description": "PHP class to make interacting with a database ridiculusly easy.",
"license": "LGPL",
"authors": [
{
"name": "Jamal Jo",
"email": "woshizmxin@163.com"
}
],
"autoload": {
"classmap": [
"ezSQL/"
]
}
}
- 加入對(duì)https://packagist.org/ 上的包的依賴
對(duì)monolog和jpush的依賴,修改如下:
{
"name": "marsthink",
"description": "PHP class to make interacting with a database ridiculusly easy.",
"license": "LGPL",
"authors": [
{
"name": "Jamal Jo",
"email": "woshizmxin@163.com"
}
],
"require": {
"monolog/monolog": "1.0.*",
"jpush/jpush": "v3.5.*"
},
"autoload": {
"classmap": [
"ezSQL/"
]
}
}
引用composer.json的庫
根據(jù)composer.json精续,Composer 生成了一個(gè) vendor/autoload.php 文件坝锰。你可以簡單的引入這個(gè)文件:
require 'vendor/autoload.php';
這使得你可以很容易的使用第三方代碼。例如:如果你的項(xiàng)目依賴 monolog重付,你就可以像這樣開始使用這個(gè)類庫顷级,并且他們將被自動(dòng)加載。
// index.php
require 'vendor/autoload.php';
$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
$log->addWarning('Foo');
composer.lock - 鎖文件
請(qǐng)?zhí)峤荒銘?yīng)用程序的 composer.lock (包括 composer.json)到你的版本庫中
在安裝依賴后确垫,Composer 將把安裝時(shí)確切的版本號(hào)列表寫入 composer.lock 文件弓颈。這將鎖定改項(xiàng)目的特定版本。install 命令將會(huì)檢查鎖文件是否存在删掀,如果存在翔冀,它將下載指定的版本(忽略 composer.json 文件中的定義)。如果不存在披泪,Composer 將讀取 composer.json 并創(chuàng)建鎖文件纤子。
這意味著,任何人建立項(xiàng)目都將下載與指定版本完全相同的依賴款票。你的持續(xù)集成服務(wù)器控硼、生產(chǎn)環(huán)境、你團(tuán)隊(duì)中的其他開發(fā)人員艾少、每件事卡乾、每個(gè)人都使用相同的依賴,從而減輕潛在的錯(cuò)誤對(duì)部署的影響缚够。即使你獨(dú)自開發(fā)項(xiàng)目幔妨,在六個(gè)月內(nèi)重新安裝項(xiàng)目時(shí),你也可以放心的繼續(xù)工作潮瓶,即使從那時(shí)起你的依賴已經(jīng)發(fā)布了許多新的版本陶冷。
修改鏡像源
運(yùn)行composer install時(shí),有時(shí)候卡在Loading composer repositories with package information毯辅,此時(shí)需要更換鏡像源頭埂伦,方法如下:
- 方法一:修改 composer 的全局配置文件(推薦方式)
打開命令行窗口(windows用戶)或控制臺(tái)(Linux、Mac 用戶)并執(zhí)行如下命令:
composer config -g repo.packagist composer https://packagist.phpcomposer.com
- 方法二:修改當(dāng)前項(xiàng)目的 composer.json
配置文件:
打開命令行窗口(windows用戶)或控制臺(tái)(Linux思恐、Mac 用戶)沾谜,進(jìn)入你的項(xiàng)目的根目錄(也就是 composer.json文件所在目錄),執(zhí)行如下命令:
composer config repo.packagist composer https://packagist.phpcomposer.com
上述命令將會(huì)在當(dāng)前項(xiàng)目中的 composer.json文件的末尾自動(dòng)添加鏡像的配置信息(你也可以自己手工添加)
注意:
- 根據(jù)經(jīng)驗(yàn)胀莹,每次部署代碼時(shí)基跑,由于工程內(nèi)的依賴關(guān)系變化,建議先刪除composer.lock描焰,再運(yùn)行composer install媳否。