PHP 的包管理工具 -- Composer

聲明 :本文轉(zhuǎn)自??http://www.reibang.com/p/5954fe55d067??

PHP 的包管理工具 -- Composer

緣起

Composer 是 PHP 的一個包管理和包依賴管理的工具 ( 官方的定義是 "Dependency Manager for PHP" ), 類似 Mac 的Homebrew, CentOS 的yum, Windows 的Chocolatey, 以及 Node.js 的npm和 Python 的pip.

在 Composer 出現(xiàn)之前使用 PHP 第三方包的操作:

上網(wǎng)尋找類庫, 從官方或者第三方網(wǎng)站下載源碼;

解壓, 調(diào)試;

假如該類庫依賴于另外一個類庫, 返回第 1 步;

PS. 可以查看我的另一篇文章--CentOS 編譯安裝 PHP 的 Memcached 擴(kuò)展, 安裝 PHP 的 Memcached 插件時, 就需要考慮依賴的庫, 如果用 CentOS 的包管理工具 -- yum 就可以比較輕松地解決

這種方式帶來的問題:

沒有統(tǒng)一的規(guī)范的資源倉庫, 各種類庫散落在互聯(lián)網(wǎng)的各個角落, 不方便比較和下載; 如果多個類庫的作者更新了版本, 需要逐個去搜素下載和調(diào)試;

如果第三方網(wǎng)站提供的源碼被植入惡意代碼, 會引入安全問題;

遇到類庫的依賴關(guān)系, 需要手動下載和調(diào)試;

版本更新不方便. 這就意味著很可能作者更新了版本, 但是你還在使用帶 Bug 的舊版本;

安裝

Composer 要求 PHP 5.3.2 以上 (官方推薦使用 5.3.4 以上, 以避免潛在的問題).

如果在安裝時提醒缺少組件, 跟著提示解決即可.

在 Mac 終端中依次粘貼下面命令以安裝 Composer (考慮安全問題, 更加建議直接到官網(wǎng)拷貝安裝命令):

php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"

php composer-setup.php

php -r "unlink('composer-setup.php');"

安裝后就可以使用php composer.phar來執(zhí)行命令;

為了全局調(diào)用, 可以修改環(huán)境變量mv ./composer.phar /usr/local/bin/composer, 之后就可以直接使用composer命令;

composer_installed

使用

連接國內(nèi)的第三方鏡像庫

由于眾所周知的原因, 訪問 Composer 官方的 packagist 網(wǎng)站速度比較慢, 可以選用第三方在國內(nèi)做的全景鏡像, 提高速度:

composer config -g repo.packagist composer https://packagist.phpcomposer.com

使用 composer 在已有項目中引入類庫

以使用 markdown 為例:

1.搜索: 在Packagist搜索類庫, 選用下載量最大的cebe/markdown類庫;

2.配置: 在項目根目錄新建 "composer.json" 文件, 文件內(nèi)容:

語法:

{"require":{"廠商/類庫":"版本"}}

比如:

{"require":{"cebe/markdown":"1.1.1"}}

PS: 配置文件中的 JSON 必須使用"雙引號", 而不能使用"單引號" (因為"雙引號"是 JSON 標(biāo)準(zhǔn)的規(guī)定的)

3.安裝

2.1cd到該項目根目錄, 運(yùn)行composer install;

2.2 安裝完畢后, 可以看到根目錄多出來一個 "vendor" 文件夾, 打開文件夾, 可以看到 "cebe" 文件夾, 里面有 "markdown" 的類庫源碼;

composer_success

4.加載

疑問: 如果我們在項目中用 Composer 安裝了十幾個類庫, 需要逐個require加載到我們的項目中嗎?

回答: 不需要. 因為 Composer 的作者已經(jīng)考慮了這個問題. 打開安裝之后生成的 "vendor" 文件, 里面有個 "autoload.php" 文件. 只要引入這個文件, 所有通過 Composer 安裝的類庫就會全部加載完成:

require(__DIR__.'/vendor/autoload.php');

5.如果以后需要新增類庫

第一種方法: 使用命令composer require, 比如composer require phpunit/phpunit:~5.7, 比如composer require twbs/bootstrap:4.0.0-beta.3;

第二種方法: 在 "composer.json" 文件中追加, 然后執(zhí)行composer update;

{"require":{"cebe/markdown":"1.1.1","phpunit/phpunit":"5.7.5"}}

通過 composer 直接創(chuàng)建某框架的項目

有些包并不是提供一個特定功能的類庫, 而是提供一個完整的框架, 比如說 Laravel 和 yii2.

直接創(chuàng)建項目的 Composer 命令是:

composer create-project 廠商/類庫 安裝路徑 版本

所以用 Composer 直接創(chuàng)建一個 Laravel 或者 yii2 的項目的命令是:

composer create-project laravel/laravel ./my_laravel_demo ~5.5.0

composer create-project yiisoft/yii2 ./my_yii2_demo 2.*

PS. 5.5 是 Laravel 的 LTS (Long Time Support) 版本.

如何指定類庫版本?

類別實(shí)例說明

指定版本號5.7.5直接指定確切的版本號

指定版本范圍>=5.6.7,<5.75.6.7或者以上,但是不到5.7的版本

通配符5.7.*相當(dāng)于>=5.7.0,<5.8.0

波浪號~5.7.5相當(dāng)于>=5.7.5,<5.8.0

如何更新類庫?

composer update

該命令主要有 2 個作用:

升級 composer.json 中的類庫, 并自動更新升級其依賴

更新自動加載的文件 -- autoload.php

因為執(zhí)行composer update需要比較長的時間, 如果只是需要更新自動加載的文件而不需要升級類庫(比如你新建了類), 可以執(zhí)行composer dump-autoload.

如何刪除引入的類庫?

composer remove 廠商/類庫

比如:

composer remove cebe/markdown

參考

Composer 官網(wǎng)(注意: 是 getcomposer.org, 而不是 composer.org)

Composer 對應(yīng)的PHP包倉庫 -- Packagist

composer 命令詳解

國內(nèi)的第三方全景鏡像(推薦用官方源, 但是因為某些原因, 可能會用到國內(nèi)鏡像)

題外

公司開始規(guī)范開發(fā), 逐步引入 PSR, Laravel 框架, PHPUnit, Composer...

從個人來說, 真的很幸運(yùn), 能夠在這么一個時期加入公司, 在順流中借勢成長. 這也是為什么寫這篇博客的原因 -- 當(dāng)然, 這也是一個博客系列的開始

文章歷史

2017/01/08 (第一次發(fā)布)

2017/04/04 增加"連接國內(nèi)的第三方鏡像庫"

2017/05/25 更新安裝 Composer 的方法

2017/05/31 介紹composer dump-autoload命令

2017/06/11 刪掉"最小化操作流程"章節(jié), 避免用戶困惑; 介紹composer update命令; 提示 JSON 必須使用雙引號;

2017/07/09 增加"安裝 PHP 的 Memcached 插件的例子", 反襯包管理工具的好處;

2017/09/11 去掉"最小使用方法"章節(jié), 避免用戶混淆; 更新 Laravel 的 LTS;

作者:patiencing

鏈接:http://www.reibang.com/p/5954fe55d067

來源:簡書

簡書著作權(quán)歸作者所有海诲,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子锨络,更是在濱河造成了極大的恐慌娩鹉,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劫拗,死亡現(xiàn)場離奇詭異阅羹,居然都是意外死亡勺疼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門灯蝴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恢口,“玉大人孝宗,你說我怎么就攤上這事穷躁。” “怎么了因妇?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵问潭,是天一觀的道長。 經(jīng)常有香客問我婚被,道長狡忙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任址芯,我火速辦了婚禮灾茁,結(jié)果婚禮上窜觉,老公的妹妹穿的比我還像新娘。我一直安慰自己北专,他們只是感情好禀挫,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拓颓,像睡著了一般语婴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上驶睦,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天砰左,我揣著相機(jī)與錄音,去河邊找鬼场航。 笑死缠导,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的溉痢。 我是一名探鬼主播酬核,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼适室!你這毒婦竟也來了嫡意?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤捣辆,失蹤者是張志新(化名)和其女友劉穎蔬螟,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汽畴,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旧巾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了忍些。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鲁猩。...
    茶點(diǎn)故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖罢坝,靈堂內(nèi)的尸體忽然破棺而出廓握,到底是詐尸還是另有隱情,我是刑警寧澤嘁酿,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布隙券,位于F島的核電站,受9級特大地震影響闹司,放射性物質(zhì)發(fā)生泄漏娱仔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一游桩、第九天 我趴在偏房一處隱蔽的房頂上張望牲迫。 院中可真熱鬧耐朴,春花似錦、人聲如沸盹憎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脚乡。三九已至蜒滩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間奶稠,已是汗流浹背俯艰。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锌订,地道東北人竹握。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像辆飘,于是被迫代替她去往敵國和親啦辐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 緣起 Composer 是 PHP 的一個包管理和包依賴管理的工具 ( 官方的定義是 "Dependency Ma...
    patiencing閱讀 6,539評論 2 3
  • 是什么 如果你知道yum蜈项、apt-get芹关、npm、bower等命令中的一種或者多種紧卒,那么侥衬,你也能很快知道compo...
    旱魃一樣閱讀 3,133評論 0 9
  • Awesome PHP 一個PHP資源列表,內(nèi)容包括:庫跑芳、框架轴总、模板、安全博个、代碼分析怀樟、日志、第三方庫盆佣、配置工具往堡、W...
    guanguans閱讀 5,765評論 0 47
  • Composer是一個非常流行的PHP包依賴管理工具,已經(jīng)取代PEAR包管理器,對于PHP開發(fā)者來說掌握Compo...
    dreamer_lk閱讀 2,412評論 0 15
  • 學(xué)習(xí)沒有什么捷徑,付出多少便收獲多少罪塔。 轉(zhuǎn)專業(yè)學(xué)習(xí)計算機(jī)已有半年投蝉,從開始的信心勃勃到現(xiàn)在的難受茫然,計算機(jī)算是給了...
    沒人玩閱讀 72評論 0 0