一隘马、composer入門
1舆吮、每次安裝新的包文件红淡,會(huì)更新/vendor/autoload.php文件
2外莲、composer.lock與composer.json的關(guān)系
文件composer.lock會(huì)根據(jù)composer.json的內(nèi)容自動(dòng)生成猪半,和composer.json在同一位置,即在安裝完所有需要的包之后偷线,Composer會(huì)在composer.lock文件中生成一張標(biāo)準(zhǔn)的包版本的文件磨确,這將鎖定所有包的版本∩睿可以使用composer.lock (當(dāng)然是和composer.json一起)來控制項(xiàng)目的版本乏奥。
composer.lock與composer.json的關(guān)系為,composer.json文件為包的元信息亥曹,composer.lock文件同樣為包的元信息邓了,但在composer.json文件中可以指定使用不明確的依賴包版本,如“>=1.0”媳瞪,在composer.lock文件中的會(huì)是當(dāng)前安裝的版本骗炉。那么當(dāng)使用Composer安裝包時(shí),它會(huì)優(yōu)先從composer.lock文件讀取依賴版本蛇受,再根據(jù)composer.json文件去獲取依賴句葵。這確保了該庫(kù)的每個(gè)使用者都能得到相同的依賴版本。這對(duì)于團(tuán)隊(duì)開發(fā)來講非常重要。
二乍丈、composer常用命令
1剂碴、composer install
當(dāng)項(xiàng)目重新部署或者合并分支時(shí),都需要執(zhí)行
composer install
命令轻专。如果當(dāng)前項(xiàng)目根目錄存在composer.lock文件忆矛,則會(huì)首先根據(jù)composer.lock文件指定的包版本從composer中下載相應(yīng)的包,如果沒有铭若,則根據(jù)composer.json文件到composer中下載合適版本的包洪碳,并生成composer.lock文件递览。2叼屠、composer update
如果直接執(zhí)行
composer update
命令,后面不指定包名绞铃,則會(huì)更新項(xiàng)目依賴的所有包文件镜雨,因此當(dāng)項(xiàng)目已經(jīng)成型,composer update
命令要慎用儿捧,不能隨便執(zhí)行荚坞,特別是生產(chǎn)環(huán)境!當(dāng)然菲盾,我們可以在
composer update
命令后面跟上包名稱颓影,這樣子就只會(huì)更新指定的包,具體步驟是:先修改composer.json文件中懒鉴,對(duì)應(yīng)包(比如monolog/monolog)的版本號(hào)為1.25.0诡挂,然后執(zhí)行composer update monolog/monolog
,則會(huì)更新monolog/monolog包到1.25.0版本临谱,其他包不會(huì)受到影響璃俗。3、composer require
使用頻率最高的命令悉默。當(dāng)我們要往項(xiàng)目中引入某個(gè)包的時(shí)候城豁,要使用該命令。
該命令執(zhí)行會(huì)更新composer.json文件抄课,并下載相應(yīng)包版本唱星,同時(shí)也會(huì)更新composer.lock文件。這樣一來跟磨,其他項(xiàng)目成員只要拿到composer.lock文件后间聊,執(zhí)
composer install
命令即可獲取到相同的包。
三吱晒、composer命令執(zhí)行流程
四甸饱、搭建php框架時(shí),composer的基礎(chǔ)用法
1、composer.json中autoload的classmap自動(dòng)加載
在composer.json中的autoload中添加classmap后叹话,需要執(zhí)行composer dump-autoload
命令才能真正生效偷遗,如下:
"autoload" : {
"classmap" : [
"app/controllers"
]
}
在項(xiàng)目根目錄中執(zhí)行composer dump-autoload
命令后,app/controllers下的類驼壶,才會(huì)被自動(dòng)加載氏豌。
2、composer.json中autoload的psr-4自動(dòng)加載
當(dāng)然热凹,如果按照上面第1點(diǎn)的方式泵喘,每次創(chuàng)建一個(gè)控制器類,都需要執(zhí)行composer dump-autoload
命令才能生效般妙,太麻煩纪铺,因此psr4就派上用場(chǎng)了:在composer.json中添加
"autoload" : {
"psr-4" : [
"controllers\\": "app/controllers/"
]
}
這樣一來,只要執(zhí)行一次composer dump-autoload
后碟渺,在app/controllers/目錄下任意添加新的控制器類鲜锚,都會(huì)被自動(dòng)加載
3、利用composer單個(gè)文件自動(dòng)加載
在開發(fā)過程中苫拍,往往有些功能函數(shù)沒必要形成一個(gè)類芜繁,這個(gè)時(shí)候我們往往需要一個(gè)工具函數(shù),例如:
if (!function_exists('dd')){
function dd(...$args){
foreach ($args as $arg){
var_dump($arg);
}
die();
}
}
這個(gè)時(shí)候绒极,我們?cè)赾omposer.json文件中添加自動(dòng)加載骏令,如下:
"autoload": {
"files": [
"app/Helpers/Helper.php"
]
}
最后執(zhí)行一次composer dump-autoload
,app/Helpers/Helper.php文件即可在全局被自動(dòng)加載了垄提。