Composer 安裝與使用

聲明:本文轉(zhuǎn)自菜鳥學(xué)堂,本人最喜歡對(duì)技術(shù)站點(diǎn)之一


Composer 是 PHP 的一個(gè)依賴管理工具娄猫。我們可以在項(xiàng)目中聲明所依賴的外部工具庫,Composer 會(huì)幫你安裝這些依賴的庫文件生闲,有了它媳溺,我們就可以很輕松的使用一個(gè)命令將其他人的優(yōu)秀代碼引用到我們的項(xiàng)目中來。

Composer 默認(rèn)情況下不是全局安裝碍讯,而是基于指定的項(xiàng)目的某個(gè)目錄中(例如 vendor)進(jìn)行安裝悬蔽。

Composer 需要 PHP 5.3.2+ 以上版本,且需要開啟 openssl捉兴。

Composer 可運(yùn)行在 Windows 蝎困、 Linux 以及 OSX 平臺(tái)上录语。

Composer 的安裝

Wondows 平臺(tái)

Wondows 平臺(tái)上,我們只需要下載?Composer-Setup.exe?后禾乘,一步步安裝即可澎埠。

需要注意的是你需要開啟 openssl 配置,我們打開 php 目錄下的 php.ini盖袭,將?extension=php_openssl.dll?前面的分號(hào)去掉就可以了失暂。

安裝成功后彼宠,我們可以通過命令窗口(cmd) 輸入?composer --version?命令來查看是否安裝成功:

接下來我們可以更改 Packagist 為國內(nèi)鏡像:

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

Linux 平臺(tái)

Linux 平臺(tái)可以使用以下命令來安裝:

# php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"# php composer-setup.phpAll settings correct for using ComposerDownloading...Composer (version 1.6.5) successfully installed to: /root/composer.pharUse it: php composer.phar

移動(dòng) composer.phar鳄虱,這樣 composer 就可以進(jìn)行全局調(diào)用:

# mv composer.phar /usr/local/bin/composer

切換為國內(nèi)鏡像:

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

更新 composer:

# composer selfupdate

Mac OS 系統(tǒng)

Mac OS 系統(tǒng)可以使用以下命令來安裝:

$ curl -sS https://getcomposer.org/installer | php$ sudo mv composer.phar /usr/local/bin/composer

$ composer --versionComposer version 1.7.2 2018-08-16 16:57:12

切換為國內(nèi)鏡像:

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

更新 composer:

$ composer selfupdate

Composer 的使用

要使用 Composer,我們需要先在項(xiàng)目的目錄下創(chuàng)建一個(gè) composer.json 文件凭峡,文件描述了項(xiàng)目的依賴關(guān)系拙已。

文件格式如下:

{? ? "require": {? ? ? ? "monolog/monolog": "1.2.*"? ? }}

以上文件說明我們需要下載從 1.2 開始的任何版本的 monolog。

接下來只要運(yùn)行以下命令即可安裝依賴包:

composer install

require 命令

除了使用 install 命令外摧冀,我們也可以使用 require 命令快速的安裝一個(gè)依賴而不需要手動(dòng)在 composer.json 里添加依賴信息:

$ composer require monolog/monolog

Composer 會(huì)先找到合適的版本倍踪,然后更新composer.json文件,在 require 那添加 monolog/monolog 包的相關(guān)信息索昂,再把相關(guān)的依賴下載下來進(jìn)行安裝建车,最后更新 composer.lock 文件并生成 php 的自動(dòng)加載文件。

update 命令

update 命令用于更新項(xiàng)目里所有的包椒惨,或者指定的某些包:

# 更新所有依賴$ composer update# 更新指定的包$ composer update monolog/monolog# 更新指定的多個(gè)包$ composer update monolog/monolog symfony/dependency-injection# 還可以通過通配符匹配包$ composer update monolog/monolog symfony/*

需要注意的時(shí)缤至,包能升級(jí)的版本會(huì)受到版本約束的約束,包不會(huì)升級(jí)到超出約束的版本的范圍康谆。例如如果 composer.json 里包的版本約束為 ^1.10领斥,而最新版本為 2.0。那么 update 命令是不能把包升級(jí)到 2.0 版本的沃暗,只能最高升級(jí)到 1.x 版本月洛。關(guān)于版本約束請看后面的介紹。

remove 命令

remove 命令用于移除一個(gè)包及其依賴(在依賴沒有被其他包使用的情況下)孽锥,如果依賴被其他包使用嚼黔,則無法移除:

$ composer remove monolog/monologLoading composer repositories with package informationUpdating dependencies (including require-dev)Package operations: 0 installs, 0 updates, 2 removals

? - Removing psr/log (1.0.2)? - Removing monolog/monolog (1.23.0)Generating autoload files

search 命令

search 命令可以搜索包:

$ composer search monolog

該命令會(huì)輸出包及其描述信息,如果只想輸出包名可以使用?--only-name?參數(shù):

$ composer search --only-name monolog

show 命令

show 命令可以列出當(dāng)前項(xiàng)目使用到包的信息:

# 列出所有已經(jīng)安裝的包$ composer show# 可以通過通配符進(jìn)行篩選$ composer show monolog/*

# 顯示具體某個(gè)包的信息

$ composer show monolog/monolog

基本約束

精確版本

我們可以告訴 Composer 安裝的具體版本惜辑,例如:1.0.2隔崎,指定 1.0.2 版本。

范圍

通過使用比較操作符來指定包的范圍韵丑。這些操作符包括:>爵卒,>=,<撵彻,<=钓株,!=实牡。

你可以定義多個(gè)范圍,使用空格或者逗號(hào) , 表示邏輯上的與轴合,使用雙豎線 || 表示邏輯上的或创坞。其中與的優(yōu)先級(jí)會(huì)大于或。 實(shí)例:

>=1.0

>=1.0 <2.0

>=1.0 <1.1 || >=1.2

我們也可以通過使用連字符?-?來指定版本范圍受葛。

連字符的左邊表明了?>=?的版本题涨,如果右邊的版本不是完整的版本號(hào),則會(huì)被使用通配符進(jìn)行補(bǔ)全总滩。例如1.0 - 2.0等同于>=1.0.0 <2.1(2.0相當(dāng)于2.0.*)纲堵,而1.0.0 - 2.1.0則等同于>=1.0.0 <=2.1.0。

通配符

可以使用通配符來設(shè)置版本闰渔。1.0.*相當(dāng)于>=1.0 <1.1席函。?

例子:1.0.*

波浪號(hào) ~

我們先通過后面這個(gè)例子去解釋~操作符的用法:~1.2相當(dāng)于>=1.2 <2.0.0,而~1.2.3相當(dāng)于>=1.2.3 <1.3.0冈涧。對(duì)于使用Semantic Versioning作為版本號(hào)標(biāo)準(zhǔn)的項(xiàng)目來說茂附,這種版本約束方式很實(shí)用。例如~1.2定義了最小的小版本號(hào)督弓,然后你可以升級(jí)2.0以下的任何版本而不會(huì)出問題营曼,因?yàn)榘凑誗emantic Versioning的版本定義,小版本的升級(jí)不應(yīng)該有兼容性的問題愚隧。簡單來說蒂阱,~定義了最小的版本,并且允許版本的最后一位版本號(hào)進(jìn)行升級(jí)(沒懂得話奸攻,請?jiān)倏匆贿吳懊娴睦樱?

例子:~1.2

需要注意的是蒜危,如果~作用在主版本號(hào)上,例如~1睹耐,按照上面的說法辐赞,Composer可以安裝版本1以后的主版本,但是事實(shí)上是~1會(huì)被當(dāng)作~1.0對(duì)待硝训,只能增加小版本响委,不能增加主版本。

折音號(hào) ^

^操作符的行為跟Semantic Versioning有比較大的關(guān)聯(lián)窖梁,它允許升級(jí)版本到安全的版本赘风。例如,^1.2.3相當(dāng)于>=1.2.3 <2.0.0纵刘,因?yàn)樵?.0版本前的版本應(yīng)該都沒有兼容性的問題邀窃。而對(duì)于1.0之前的版本,這種約束方式也考慮到了安全問題假哎,例如^0.3會(huì)被當(dāng)作>=0.3.0 <0.4.0對(duì)待瞬捕。?

例子:^1.2.3

版本穩(wěn)定性

如果你沒有顯式的指定版本的穩(wěn)定性鞍历,Composer會(huì)根據(jù)使用的操作符,默認(rèn)在內(nèi)部指定為-dev或者-stable肪虎。例如:

約束內(nèi)部約束

1.2.3=1.2.3.0-stable

>1.2>1.2.0.0-stable

>=1.2>=1.2.0.0-dev

>=1.2-stable>=1.2.0.0-stable

<1.3<1.3.0.0-dev

<=1.3<=1.3.0.0-stable

1 - 2>=1.0.0.0-dev <3.0.0.0-dev

~1.3>=1.3.0.0-dev <2.0.0.0-dev

1.4.*>=1.4.0.0-dev <1.5.0.0-dev

例子:1.0 - 2.0

如果你想指定版本只要穩(wěn)定版本劣砍,你可以在版本后面添加后綴-stable。

minimum-stability?配置項(xiàng)定義了包在選擇版本時(shí)對(duì)穩(wěn)定性的選擇的默認(rèn)行為扇救。默認(rèn)是stable刑枝。它的值如下(按照穩(wěn)定性排序):dev,alpha迅腔,beta装畅,RC和stable。除了修改這個(gè)配置去修改這個(gè)默認(rèn)行為钾挟,我們還可以通過穩(wěn)定性標(biāo)識(shí)(例如@stable和@dev)來安裝一個(gè)相比于默認(rèn)配置不同穩(wěn)定性的版本洁灵。例如:

{? ? "require": {? ? ? ? "monolog/monolog": "1.0.*@beta",? ? ? ? "acme/foo": "@dev"? ? }}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饱岸,一起剝皮案震驚了整個(gè)濱河市掺出,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌苫费,老刑警劉巖汤锨,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異百框,居然都是意外死亡闲礼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門铐维,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柬泽,“玉大人,你說我怎么就攤上這事嫁蛇∠遣ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵睬棚,是天一觀的道長第煮。 經(jīng)常有香客問我,道長抑党,這世上最難降的妖魔是什么包警? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮底靠,結(jié)果婚禮上害晦,老公的妹妹穿的比我還像新娘。我一直安慰自己暑中,他們只是感情好壹瘟,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布苟呐。 她就那樣靜靜地躺著,像睡著了一般俐筋。 火紅的嫁衣襯著肌膚如雪牵素。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天澄者,我揣著相機(jī)與錄音笆呆,去河邊找鬼。 笑死粱挡,一個(gè)胖子當(dāng)著我的面吹牛赠幕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播询筏,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼榕堰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嫌套?” 一聲冷哼從身側(cè)響起逆屡,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎踱讨,沒想到半個(gè)月后魏蔗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡痹筛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年莺治,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帚稠。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谣旁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出滋早,到底是詐尸還是另有隱情榄审,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布馆衔,位于F島的核電站瘟判,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏角溃。R本人自食惡果不足惜拷获,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望减细。 院中可真熱鬧匆瓜,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至左冬,卻和暖如春桐筏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拇砰。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國打工梅忌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人除破。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓牧氮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瑰枫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子踱葛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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