本文檔根據(jù)Composer中國官方文檔經(jīng)過整理編排而成,相對官方文檔更符合常規(guī)的思維和操作習(xí)慣滓窍,方便上手碍庵,內(nèi)容比較全,但如需更詳細的內(nèi)容割按,請查看官方文檔
簡介
Composer 是 PHP 的一個依賴管理工具膨报。它允許你申明項目所依賴的代碼庫,它會在你的項目中為你安裝他們适荣。
安裝 - Windows
使用安裝程序
這是將 Composer 安裝在你機器上的最簡單的方法现柠。
下載并且運行 Composer-Setup.exe,它將安裝最新版本的 Composer 束凑,并設(shè)置好系統(tǒng)的環(huán)境變量晒旅,因此你可以在任何目錄下直接使用 composer
命令。
安裝 - *nix
下載 Composer 的可執(zhí)行文件
局部安裝
要真正獲取 Composer汪诉,我們需要做兩件事废恋。首先安裝 Composer (同樣的,這意味著它將下載到你的項目中):
curl -sS https://getcomposer.org/installer | php
你可以通過 --install-dir
選項指定 Composer 的安裝目錄(它可以是一個絕對或相對路徑):
curl -sS https://getcomposer.org/installer | php -- --install-dir=bin
全局安裝
你可以將此文件放在任何地方扒寄。如果你把它放在系統(tǒng)的 PATH
目錄中鱼鼓,你就能在全局訪問它。 在類Unix系統(tǒng)中该编,你甚至可以在使用時不加 php
前綴迄本。
你可以執(zhí)行這些命令讓 composer
在你的系統(tǒng)中進行全局調(diào)用:
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
配置 Packagist 鏡像
修改 composer 的全局配置文件(推薦方式)
打開命令行窗口(windows用戶)或控制臺(Linux、Mac 用戶)并執(zhí)行如下命令:
因為Composer中國鏡像比較慢课竣,這里推薦使用阿里云鏡像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
使用 Composer
如果你進行了全局安裝嘉赎,并且沒有 phar 文件在當(dāng)前目錄,請使用下面的命令代替:
要檢查 Composer 是否正常工作于樟,只需要在命令行輸入:
composer
這將返回給你一個可執(zhí)行的命令列表公条。
初始化項目 init
在 “庫” 那一章我們看到了如何手動創(chuàng)建 composer.json
文件。實際上還有一個 init
命令可以更容易的做到這一點迂曲。
當(dāng)您運行該命令靶橱,它會以交互方式要求您填寫一些信息,同時聰明的使用一些默認(rèn)值路捧。
composer init
初始化-參數(shù)
- --name: 包的名稱关霸。
- --description: 包的描述。
- --author: 包的作者杰扫。
- --homepage: 包的主頁队寇。
-
--require: 需要依賴的其它包,必須要有一個版本約束章姓。并且應(yīng)該遵循
foo/bar:1.0.0
這樣的格式佳遣。 - --require-dev: 開發(fā)版的依賴包炭序,內(nèi)容格式與 --require 相同。
-
--stability (-s):
minimum-stability
字段的值苍日。
申明依賴 require
require
命令增加新的依賴包到當(dāng)前目錄的 composer.json
文件中惭聂。
composer require
在添加或改變依賴時, 修改后的依賴關(guān)系將被安裝或者更新相恃。
如果你不希望通過交互來指定依賴包辜纲,你可以在這條令中直接指明依賴包拦耐。
composer require vendor/package:2.* vendor/package2:dev-master
申明依賴-參數(shù)
-
--prefer-source: 當(dāng)有可用的包時扫俺,從
source
安裝。 -
--prefer-dist: 當(dāng)有可用的包時太示,從
dist
安裝柠贤。 -
--dev: 安裝
require-dev
字段中列出的包。 - --no-update: 禁用依賴關(guān)系的自動更新类缤。
- --no-progress: 移除進度信息臼勉,這可以避免一些不處理換行的終端或腳本出現(xiàn)混亂的顯示。
- --update-with-dependencies 一并更新新裝包的依賴呀非。
全局執(zhí)行 global
global
命令允許你在 COMPOSER_HOME 目錄下執(zhí)行其它命令坚俗,像 install
镜盯、require
或 update
岸裙。
并且如果你將 $COMPOSER_HOME/vendor/bin
加入到了 $PATH
環(huán)境變量中,你就可以用它在命令行中安裝全局應(yīng)用速缆,下面是一個例子:
composer global require fabpot/php-cs-fixer:dev-master
現(xiàn)在 php-cs-fixer
就可以在全局范圍使用了(假設(shè)你已經(jīng)設(shè)置了你的 PATH)降允。如果稍后你想更新它,你只需要運行 global update
:
composer global update
安裝 install
install
命令從當(dāng)前目錄讀取 composer.json
文件艺糜,處理了依賴關(guān)系剧董,并把其安裝到 vendor
目錄下幢尚。
composer install
如果當(dāng)前目錄下存在 composer.lock
文件,它會從此文件讀取依賴版本翅楼,而不是根據(jù) composer.json
文件去獲取依賴尉剩。這確保了該庫的每個使用者都能得到相同的依賴版本。
如果沒有 composer.lock
文件毅臊,composer 將在處理完依賴關(guān)系后創(chuàng)建它理茎。
安裝-參數(shù)
-
--prefer-source: 下載包的方式有兩種:
source
和dist
。對于穩(wěn)定版本 composer 將默認(rèn)使用dist
方式管嬉。而source
表示版本控制源 皂林。如果--prefer-source
是被啟用的,composer 將從source
安裝(如果有的話)蚯撩。如果想要使用一個 bugfix 到你的項目础倍,這是非常有用的。并且可以直接從本地的版本庫直接獲取依賴關(guān)系胎挎。 -
--prefer-dist: 與
--prefer-source
相反沟启,composer 將盡可能的從dist
獲取,這將大幅度的加快在 build servers 上的安裝犹菇。這也是一個回避 git 問題的途徑美浦,如果你不清楚如何正確的設(shè)置。 -
--dry-run: 如果你只是想演示而并非實際安裝一個包项栏,你可以運行
--dry-run
命令浦辨,它將模擬安裝并顯示將會發(fā)生什么。 -
--dev: 安裝
require-dev
字段中列出的包(這是一個默認(rèn)值)沼沈。 -
--no-dev: 跳過
require-dev
字段中列出的包流酬。 -
--no-scripts: 跳過
composer.json
文件中定義的腳本。 - --no-plugins: 關(guān)閉 plugins列另。
- --no-progress: 移除進度信息芽腾,這可以避免一些不處理換行的終端或腳本出現(xiàn)混亂的顯示。
- --optimize-autoloader (-o): 轉(zhuǎn)換 PSR-0/4 autoloading 到 classmap 可以獲得更快的加載支持页衙。特別是在生產(chǎn)環(huán)境下建議這么做摊滔,但由于運行需要一些時間,因此并沒有作為默認(rèn)值店乐。
更新 update
為了獲取依賴的最新版本艰躺,并且升級 composer.lock
文件,你應(yīng)該使用 update
命令眨八。
composer update
這將解決項目的所有依賴腺兴,并將確切的版本號寫入 composer.lock
。
如果你只是想更新幾個包廉侧,你可以像這樣分別列出它們:
composer update vendor/package vendor/package2
你還可以使用通配符進行批量更新:
composer update vendor/*
更新-參數(shù)
-
--prefer-source: 當(dāng)有可用的包時页响,從
source
安裝篓足。 -
--prefer-dist: 當(dāng)有可用的包時,從
dist
安裝闰蚕。 - --dry-run: 模擬命令栈拖,并沒有做實際的操作。
-
--dev: 安裝
require-dev
字段中列出的包(這是一個默認(rèn)值)没陡。 -
--no-dev: 跳過
require-dev
字段中列出的包辱魁。 -
--no-scripts: 跳過
composer.json
文件中定義的腳本。 - --no-plugins: 關(guān)閉 plugins诗鸭。
- --no-progress: 移除進度信息染簇,這可以避免一些不處理換行的終端或腳本出現(xiàn)混亂的顯示。
- --optimize-autoloader (-o): 轉(zhuǎn)換 PSR-0/4 autoloading 到 classmap 可以獲得更快的加載支持强岸。特別是在生產(chǎn)環(huán)境下建議這么做锻弓,但由于運行需要一些時間,因此并沒有作為默認(rèn)值蝌箍。
- --lock: 僅更新 lock 文件的 hash青灼,取消有關(guān) lock 文件過時的警告。
- --with-dependencies 同時更新白名單內(nèi)包的依賴關(guān)系妓盲,這將進行遞歸更新杂拨。
搜索 search
search
命令允許你為當(dāng)前項目搜索依賴包,通常它只搜索 packagist.org 上的包悯衬,你可以簡單的輸入你的搜索條件弹沽。
composer search monolog
您也可以通過傳遞多個參數(shù)來進行多條件搜索。
搜索-參數(shù)
- --only-name (-N): 僅針對指定的名稱搜索(完全匹配)筋粗。
展示 show
列出所有可用的軟件包策橘,你可以使用 show
命令。
composer show
如果你想看到一個包的詳細信息娜亿,你可以輸入一個包名稱丽已。
composer show monolog/monolog
name : monolog/monolog
versions : master-dev, 1.0.2, 1.0.1, 1.0.0, 1.0.0-RC1
type : library
names : monolog/monolog
source : [git] http://github.com/Seldaek/monolog.git 3d4e60d0cbc4b888fe5ad223d77964428b1978da
dist : [zip] http://github.com/Seldaek/monolog/zipball/3d4e60d0cbc4b888fe5ad223d77964428b1978da 3d4e60d0cbc4b888fe5ad223d77964428b1978da
license : MIT
autoload
psr-0
Monolog : src/
requires
php >=5.3.0
你甚至可以輸入一個軟件包的版本號,來顯示該版本的詳細信息买决。
composer show monolog/monolog 1.0.2
包名稱
包名稱由供應(yīng)商名稱和其項目名稱構(gòu)成沛婴。通常容易產(chǎn)生相同的項目名稱,而供應(yīng)商名稱的存在則很好的解決了命名沖突的問題督赤。它允許兩個不同的人創(chuàng)建同樣名為 json
的庫嘁灯,而之后它們將被命名為 igorw/json
和 seldaek/json
。
這里我們需要引入 monolog/monolog
够挂,供應(yīng)商名稱與項目的名稱相同旁仿,對于一個具有唯一名稱的項目藕夫,我們推薦這么做孽糖。它還允許以后在同一個命名空間添加更多的相關(guān)項目枯冈。如果你維護著一個庫,這將使你可以很容易的把它分離成更小的部分办悟。
包版本
在前面的例子中尘奏,我們引入的 monolog 版本指定為 1.0.*
。這表示任何從 1.0
開始的開發(fā)分支病蛉,它將會匹配 1.0.0
炫加、1.0.2
或者 1.0.20
。
版本約束可以用幾個不同的方法來指定铺然。
名稱 | 實例 | 描述 | ||
---|---|---|---|---|
確切的版本號 | 1.0.2 |
你可以指定包的確切版本俗孝。 | ||
范圍 |
>=1.0 `>=1.0,<2.0``>=1.0,<1.1 |
>=1.2` | 通過使用比較操作符可以指定有效的版本范圍。 有效的運算符:> 魄健、>= 赋铝、< 、<= 沽瘦、!= 革骨。 你可以定義多個范圍,用逗號隔開析恋,這將被視為一個邏輯AND處理良哲。一個管道符號` |
`將作為邏輯OR處理。 AND 的優(yōu)先級高于 OR助隧。 |
通配符 | 1.0.* |
你可以使用通配符* 來指定一種模式筑凫。1.0.* 與>=1.0,<1.1 是等效的。 |
||
賦值運算符 | ~1.2 |
這對于遵循語義化版本號的項目非常有用并村。~1.2 相當(dāng)于>=1.2,<2.0 漏健。想要了解更多,請閱讀下一小節(jié)橘霎。 |
下一個重要版本(波浪號運算符)
~
最好用例子來解釋: ~1.2
相當(dāng)于 >=1.2,<2.0
蔫浆,而 ~1.2.3
相當(dāng)于 >=1.2.3,<1.3
。正如你所看到的這對于遵循 語義化版本號 的項目最有用姐叁。一個常見的用法是標(biāo)記你所依賴的最低版本瓦盛,像 ~1.2
(允許1.2以上的任何版本,但不包括2.0)外潜。由于理論上直到2.0應(yīng)該都沒有向后兼容性問題原环,所以效果很好。你還會看到它的另一種用法处窥,使用 ~
指定最低版本嘱吗,但允許版本號的最后一位數(shù)字上升。
注意: 雖然
2.0-beta.1
嚴(yán)格地說是早于2.0
,但是谒麦,根據(jù)版本約束條件俄讹, 例如~1.2
卻不會安裝這個版本。就像前面所講的~1.2
只意味著.2
部分可以改變绕德,但是1.
部分是固定的患膛。
穩(wěn)定性
默認(rèn)情況下只有穩(wěn)定的發(fā)行版才會被考慮在內(nèi)。如果你也想獲得 RC耻蛇、beta踪蹬、alpha 或 dev 版本,你可以使用 穩(wěn)定標(biāo)志臣咖。你可以對所有的包做 最小穩(wěn)定性 設(shè)置跃捣,而不是每個依賴逐一設(shè)置。
安裝依賴包
獲取定義的依賴到你的本地項目夺蛇,只需要調(diào)用 composer
運行 install
命令枝缔。
composer install
接著前面的例子,這將會找到 monolog/monolog
的最新版本蚊惯,并將它下載到 vendor
目錄愿卸。 這是一個慣例把第三方的代碼到一個指定的目錄 vendor
。如果是 monolog 將會創(chuàng)建 vendor/monolog/monolog
目錄截型。
小技巧: 如果你正在使用Git來管理你的項目趴荸, 你可能要添加
vendor
到你的.gitignore
文件中。 你不會希望將所有的代碼都添加到你的版本庫中宦焦。
另一件事是 install
命令將創(chuàng)建一個 composer.lock
文件到你項目的根目錄中发钝。
composer.lock
- 鎖文件
在安裝依賴后,Composer 將把安裝時確切的版本號列表寫入 composer.lock
文件波闹。這將鎖定改項目的特定版本酝豪。
請?zhí)峤荒銘?yīng)用程序的 composer.lock (包括 composer.json)到你的版本庫中
這是非常重要的,因為 install
命令將會檢查鎖文件是否存在精堕,如果存在孵淘,它將下載指定的版本(忽略 composer.json
文件中的定義)。
這意味著歹篓,任何人建立項目都將下載與指定版本完全相同的依賴瘫证。你的持續(xù)集成服務(wù)器、生產(chǎn)環(huán)境庄撮、你團隊中的其他開發(fā)人員背捌、每件事、每個人都使用相同的依賴洞斯,從而減輕潛在的錯誤對部署的影響毡庆。即使你獨自開發(fā)項目,在六個月內(nèi)重新安裝項目時,你也可以放心的繼續(xù)工作么抗,即使從那時起你的依賴已經(jīng)發(fā)布了許多新的版本毅否。
如果不存在 composer.lock
文件,Composer 將讀取 composer.json
并創(chuàng)建鎖文件乖坠。
這意味著如果你的依賴更新了新的版本搀突,你將不會獲得任何更新刀闷。此時要更新你的依賴版本請使用 update
命令熊泵。這將獲取最新匹配的版本(根據(jù)你的 composer.json
文件)并將新版本更新進鎖文件。
php composer.phar update
如果只想安裝或更新一個依賴甸昏,你可以白名單它們:
php composer.phar update monolog/monolog [...]
注意: 對于庫顽分,并不一定建議提交鎖文件 請參考:庫的鎖文件.
自動加載
對于庫的自動加載信息,Composer 生成了一個 vendor/autoload.php
文件注祖。你可以簡單的引入這個文件赦邻,你會得到一個免費的自動加載支持填抬。
require 'vendor/autoload.php';
這使得你可以很容易的使用第三方代碼。例如:如果你的項目依賴 monolog缸沃,你就可以像這樣開始使用這個類庫,并且他們將被自動加載修械。
$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
$log->addWarning('Foo');
你可以在 composer.json
的 autoload
字段中增加自己的 autoloader趾牧。
{
"autoload": {
"psr-4": {"Acme\\": "src/"}
}
}
Composer 將注冊一個 PSR-4 autoloader 到 Acme
命名空間。
你可以定義一個從命名空間到目錄的映射肯污。此時 src
會在你項目的根目錄翘单,與 vendor
文件夾同級。例如 src/Foo.php
文件應(yīng)該包含 Acme\Foo
類蹦渣。
添加 autoload
字段后哄芜,你應(yīng)該再次運行 install
命令來生成 vendor/autoload.php
文件。
引用這個文件也將返回 autoloader 的實例柬唯,你可以將包含調(diào)用的返回值存儲在變量中认臊,并添加更多的命名空間。這對于在一個測試套件中自動加載類文件是非常有用的锄奢,例如美尸。
$loader = require 'vendor/autoload.php';
$loader->add('Acme\\Test\\', __DIR__);
除了 PSR-4 自動加載,classmap 也是支持的斟薇。這允許類被自動加載师坎,即使不符合 PSR-0 規(guī)范。詳細請查看 自動加載-參考堪滨。
注意: Composer 提供了自己的 autoloader胯陋。如果你不想使用它,你可以僅僅引入
vendor/composer/autoload_*.php
文件,它返回一個關(guān)聯(lián)數(shù)組遏乔,你可以通過這個關(guān)聯(lián)數(shù)組配置自己的 autoloader义矛。
庫(資源包)
本章將告訴你如何通過 Composer 來安裝你的庫。
- 庫(資源包)
每一個項目都是一個包
<u>只要你有一個 composer.json
文件在目錄中盟萨,那么整個目錄就是一個包凉翻。</u>當(dāng)你添加一個 require
到項目中,你就是在創(chuàng)建一個依賴于其它庫的包捻激。你的項目和庫之間唯一的區(qū)別是制轰,你的項目是一個沒有名字的包。
為了使它成為一個可安裝的包胞谭,你需要給它一個名稱垃杖。你可以通過 composer.json
中的 name
來定義:
{
"name": "acme/hello-world",
"require": {
"monolog/monolog": "1.0.*"
}
}
在這種情況下項目的名稱為 acme/hello-world
,其中 acme
是供應(yīng)商的名稱丈屹。供應(yīng)商的名稱是必須填寫的调俘。
注意: 如果你不知道拿什么作為供應(yīng)商的名稱, 那么使用你 github 上的用戶名通常是不錯的選擇旺垒。 雖然包名不區(qū)分大小寫彩库,但慣例是使用小寫字母,并用連字符作為單詞的分隔先蒋。
平臺軟件包
Composer 將那些已經(jīng)安裝在系統(tǒng)上骇钦,但并不是由 Composer 安裝的包視為一個虛擬的平臺軟件包。這包括PHP本身鞭达,PHP擴展和一些系統(tǒng)庫司忱。
-
php
表示用戶的 PHP 版本要求,你可以對其做出限制畴蹭。例如>=5.4.0
坦仍。如果需要64位版本的 PHP,你可以使用php-64bit
進行限制叨襟。 -
hhvm
代表的是 HHVM(也就是 HipHop Virtual Machine) 運行環(huán)境的版本繁扎,并且允許你設(shè)置一個版本限制,例如糊闽,'>=2.3.3'梳玫。 -
ext-<name>
可以幫你指定需要的 PHP 擴展(包括核心擴展)。通常 PHP 拓展的版本可以是不一致的右犹,將它們的版本約束為*
是一個不錯的主意提澎。一個 PHP 擴展包的例子:包名可以寫成ext-gd
。 -
lib-<name>
允許對 PHP 庫的版本進行限制念链。
以下是可供使用的名稱:curl
盼忌、iconv
积糯、icu
、libxml
谦纱、openssl
看成、pcre
、uuid
跨嘉、xsl
川慌。
你可以使用 composer show --platform
命令來獲取可用的平臺軟件包的列表。
指明版本
你需要一些方法來指明自己開發(fā)的包的版本祠乃,當(dāng)你在 Packagist 上發(fā)布自己的包梦重,它能夠從 VCS (git, svn, hg) 的信息推斷出包的版本,因此你不必手動指明版本號跳纳,并且也不建議這樣做忍饰。請查看 標(biāo)簽 和 分支 來了解版本號是如何被提取的贪嫂。
如果你想要手動創(chuàng)建并且真的要明確指定它寺庄,你只需要添加一個 version
字段:
{
"version": "1.0.0"
}
注意: 你應(yīng)該盡量避免手動設(shè)置版本號,因為標(biāo)簽的值必須與標(biāo)簽名相匹配力崇。
標(biāo)簽
對于每一個看起來像版本號的標(biāo)簽斗塘,都會相應(yīng)的創(chuàng)建一個包的版本。它應(yīng)該符合 'X.Y.Z' 或者 'vX.Y.Z' 的形式亮靴,-patch
馍盟、-alpha
、-beta
或 -RC
這些后綴是可選的茧吊。在后綴之后也可以再跟上一個數(shù)字贞岭。
下面是有效的標(biāo)簽名稱的幾個例子:
- 1.0.0
- v1.0.0
- 1.10.5-RC1
- v4.4.4beta2
- v2.0.0-alpha
- v2.0.4-p1
注意: 即使你的標(biāo)簽帶有前綴
v
, 由于在需要require
一個版本的約束時是不允許這種前綴的搓侄, 因此v
將被省略(例如標(biāo)簽V1.0.0
將創(chuàng)建1.0.0
版本)瞄桨。
Packagist 鏡像使用方法
鏡像用法
有兩種方式啟用本鏡像服務(wù):
-
系統(tǒng)全局配置: 即將配置信息添加到 Composer 的全局配置文件
config.json
中。見“方法一” -
單個項目配置: 將配置信息添加到某個項目的
composer.json
文件中讶踪。見“方法二”
方法一: 修改 composer 的全局配置文件(推薦方式)
打開命令行窗口(windows用戶)或控制臺(Linux芯侥、Mac 用戶)并執(zhí)行如下命令:
復(fù)制
composer config -g repo.packagist composer https://packagist.phpcomposer.com
方法二: 修改當(dāng)前項目的 composer.json
配置文件:
打開命令行窗口(windows用戶)或控制臺(Linux、Mac 用戶)乳讥,進入你的項目的根目錄(也就是 composer.json
文件所在目錄)柱查,執(zhí)行如下命令:
復(fù)制
composer config repo.packagist composer https://packagist.phpcomposer.com
上述命令將會在當(dāng)前項目中的 composer.json
文件的末尾自動添加鏡像的配置信息(你也可以自己手工添加):
復(fù)制
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
}
以 laravel 項目的 composer.json
配置文件為例,執(zhí)行上述命令后如下所示(注意最后幾行):
復(fù)制
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"php": ">=5.5.9",
"laravel/framework": "5.2.*"
},
"config": {
"preferred-install": "dist"
},
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
}
}
OK云石,一切搞定唉工!試一下 composer install
來體驗飛一般的速度吧!
鏡像原理:
一般情況下汹忠,安裝包的數(shù)據(jù)(主要是 zip 文件)一般是從 github.com
上下載的淋硝,安裝包的元數(shù)據(jù)是從 packagist.org
上下載的告嘲。
然而,由于眾所周知的原因奖地,國外的網(wǎng)站連接速度很慢橄唬,并且隨時可能被“墻”甚至“不存在”。
“Packagist 中國全量鏡像”所做的就是緩存所有安裝包和元數(shù)據(jù)到國內(nèi)的機房并通過國內(nèi)的 CDN 進行加速参歹,這樣就不必再去向國外的網(wǎng)站發(fā)起請求仰楚,從而達到加速 composer install
以及 composer update
的過程,并且更加快速犬庇、穩(wěn)定僧界。因此,即使 packagist.org
臭挽、github.com
發(fā)生故障(主要是連接速度太慢和被墻)捂襟,你仍然可以下載、更新安裝包欢峰。
解除鏡象:
如果需要解除鏡像并恢復(fù)到 packagist 官方源葬荷,請執(zhí)行以下命令:
復(fù)制
composer config -g --unset repos.packagist
執(zhí)行之后,composer 會利用默認(rèn)值(也就是官方源)重置源地址纽帖。
將來如果還需要使用鏡像的話宠漩,只需要根據(jù)前面的“鏡像用法”中介紹的方法再次設(shè)置鏡像地址即可。
命令行
你已經(jīng)學(xué)會了如何使用命令行界面做一些事情懊直。本章將向你介紹所有可用的命令扒吁。
為了從命令行獲得幫助信息,請運行 composer
或者 composer list
命令室囊,然后結(jié)合 --help
命令來獲得更多的幫助信息雕崩。
- 命令行
- 全局參數(shù)
- 進程退出代碼
-
初始化
init
- - 參數(shù) -
安裝
install
- - 參數(shù) -
更新
update
- - 參數(shù) -
申明依賴
require
- - 參數(shù) - 全局執(zhí)行
global
-
搜索
search
- - 參數(shù) -
展示
show
- - 參數(shù) -
依賴性檢測
depends
- - 參數(shù) - 有效性檢測
validate
- 依賴包狀態(tài)檢測
status
-
自我更新
self-update
- - 參數(shù) -
更改配置
config
- - 使用方法 - - 參數(shù) - - 修改包來源 -
創(chuàng)建項目
create-project
- - 參數(shù) -
打印自動加載索引
dump-autoload
- - 參數(shù) - 查看許可協(xié)議
licenses
- 執(zhí)行腳本
run-script
- 診斷
diagnose
-
歸檔
archive
- - 參數(shù) - 獲取幫助信息
help
- 環(huán)境變量
全局參數(shù)
下列參數(shù)可與每一個命令結(jié)合使用:
-
--verbose (-v):
增加反饋信息的詳細度。
- -v 表示正常輸出融撞。
- -vv 表示更詳細的輸出盼铁。
- -vvv 則是為了 debug。
--help (-h): 顯示幫助信息懦铺。
--quiet (-q): 禁止輸出任何信息捉貌。
--no-interaction (-n): 不要詢問任何交互問題。
--working-dir (-d): 如果指定的話冬念,使用給定的目錄作為工作目錄趁窃。
--profile: 顯示時間和內(nèi)存使用信息。
--ansi: 強制 ANSI 輸出急前。
--no-ansi: 關(guān)閉 ANSI 輸出醒陆。
--version (-V): 顯示當(dāng)前應(yīng)用程序的版本信息。
進程退出代碼
- 0: 正常
- 1: 通用/未知錯誤
- 2: 依賴關(guān)系處理錯誤
初始化 init
在 “庫” 那一章我們看到了如何手動創(chuàng)建 composer.json
文件裆针。實際上還有一個 init
命令可以更容易的做到這一點刨摩。
當(dāng)您運行該命令寺晌,它會以交互方式要求您填寫一些信息,同時聰明的使用一些默認(rèn)值澡刹。
composer init
初始化-參數(shù)
- --name: 包的名稱呻征。
- --description: 包的描述。
- --author: 包的作者罢浇。
- --homepage: 包的主頁陆赋。
-
--require: 需要依賴的其它包,必須要有一個版本約束嚷闭。并且應(yīng)該遵循
foo/bar:1.0.0
這樣的格式攒岛。 - --require-dev: 開發(fā)版的依賴包,內(nèi)容格式與 --require 相同胞锰。
-
--stability (-s):
minimum-stability
字段的值灾锯。
申明依賴 require
require
命令增加新的依賴包到當(dāng)前目錄的 composer.json
文件中。
composer require
在添加或改變依賴時嗅榕, 修改后的依賴關(guān)系將被安裝或者更新顺饮。
如果你不希望通過交互來指定依賴包,你可以在這條令中直接指明依賴包誊册。
composer require vendor/package:2.* vendor/package2:dev-master
申明依賴-參數(shù)
-
--prefer-source: 當(dāng)有可用的包時领突,從
source
安裝暖璧。 -
--prefer-dist: 當(dāng)有可用的包時案怯,從
dist
安裝。 -
--dev: 安裝
require-dev
字段中列出的包澎办。 - --no-update: 禁用依賴關(guān)系的自動更新嘲碱。
- --no-progress: 移除進度信息,這可以避免一些不處理換行的終端或腳本出現(xiàn)混亂的顯示局蚀。
- --update-with-dependencies 一并更新新裝包的依賴麦锯。
全局執(zhí)行 global
global
命令允許你在 COMPOSER_HOME 目錄下執(zhí)行其它命令,像 install
琅绅、require
或 update
扶欣。
并且如果你將 $COMPOSER_HOME/vendor/bin
加入到了 $PATH
環(huán)境變量中,你就可以用它在命令行中安裝全局應(yīng)用千扶,下面是一個例子:
composer global require fabpot/php-cs-fixer:dev-master
現(xiàn)在 php-cs-fixer
就可以在全局范圍使用了(假設(shè)你已經(jīng)設(shè)置了你的 PATH)料祠。如果稍后你想更新它,你只需要運行 global update
:
composer global update
安裝 install
install
命令從當(dāng)前目錄讀取 composer.json
文件澎羞,處理了依賴關(guān)系髓绽,并把其安裝到 vendor
目錄下。
composer install
如果當(dāng)前目錄下存在 composer.lock
文件妆绞,它會從此文件讀取依賴版本顺呕,而不是根據(jù) composer.json
文件去獲取依賴枫攀。這確保了該庫的每個使用者都能得到相同的依賴版本。
如果沒有 composer.lock
文件株茶,composer 將在處理完依賴關(guān)系后創(chuàng)建它来涨。
安裝-參數(shù)
-
--prefer-source: 下載包的方式有兩種:
source
和dist
。對于穩(wěn)定版本 composer 將默認(rèn)使用dist
方式启盛。而source
表示版本控制源 扫夜。如果--prefer-source
是被啟用的,composer 將從source
安裝(如果有的話)驰徊。如果想要使用一個 bugfix 到你的項目笤闯,這是非常有用的。并且可以直接從本地的版本庫直接獲取依賴關(guān)系棍厂。 -
--prefer-dist: 與
--prefer-source
相反颗味,composer 將盡可能的從dist
獲取,這將大幅度的加快在 build servers 上的安裝牺弹。這也是一個回避 git 問題的途徑浦马,如果你不清楚如何正確的設(shè)置。 -
--dry-run: 如果你只是想演示而并非實際安裝一個包张漂,你可以運行
--dry-run
命令晶默,它將模擬安裝并顯示將會發(fā)生什么。 -
--dev: 安裝
require-dev
字段中列出的包(這是一個默認(rèn)值)航攒。 -
--no-dev: 跳過
require-dev
字段中列出的包磺陡。 -
--no-scripts: 跳過
composer.json
文件中定義的腳本。 - --no-plugins: 關(guān)閉 plugins漠畜。
- --no-progress: 移除進度信息币他,這可以避免一些不處理換行的終端或腳本出現(xiàn)混亂的顯示。
- --optimize-autoloader (-o): 轉(zhuǎn)換 PSR-0/4 autoloading 到 classmap 可以獲得更快的加載支持憔狞。特別是在生產(chǎn)環(huán)境下建議這么做蝴悉,但由于運行需要一些時間,因此并沒有作為默認(rèn)值瘾敢。
更新 update
為了獲取依賴的最新版本拍冠,并且升級 composer.lock
文件,你應(yīng)該使用 update
命令簇抵。
composer update
這將解決項目的所有依賴庆杜,并將確切的版本號寫入 composer.lock
。
如果你只是想更新幾個包正压,你可以像這樣分別列出它們:
composer update vendor/package vendor/package2
你還可以使用通配符進行批量更新:
composer update vendor/*
更新-參數(shù)
-
--prefer-source: 當(dāng)有可用的包時欣福,從
source
安裝。 -
--prefer-dist: 當(dāng)有可用的包時焦履,從
dist
安裝拓劝。 - --dry-run: 模擬命令雏逾,并沒有做實際的操作。
-
--dev: 安裝
require-dev
字段中列出的包(這是一個默認(rèn)值)郑临。 -
--no-dev: 跳過
require-dev
字段中列出的包栖博。 -
--no-scripts: 跳過
composer.json
文件中定義的腳本。 - --no-plugins: 關(guān)閉 plugins厢洞。
- --no-progress: 移除進度信息仇让,這可以避免一些不處理換行的終端或腳本出現(xiàn)混亂的顯示。
- --optimize-autoloader (-o): 轉(zhuǎn)換 PSR-0/4 autoloading 到 classmap 可以獲得更快的加載支持躺翻。特別是在生產(chǎn)環(huán)境下建議這么做丧叽,但由于運行需要一些時間,因此并沒有作為默認(rèn)值公你。
- --lock: 僅更新 lock 文件的 hash踊淳,取消有關(guān) lock 文件過時的警告。
- --with-dependencies 同時更新白名單內(nèi)包的依賴關(guān)系陕靠,這將進行遞歸更新迂尝。
搜索 search
search
命令允許你為當(dāng)前項目搜索依賴包,通常它只搜索 packagist.org 上的包剪芥,你可以簡單的輸入你的搜索條件垄开。
composer search monolog
您也可以通過傳遞多個參數(shù)來進行多條件搜索。
搜索-參數(shù)
- --only-name (-N): 僅針對指定的名稱搜索(完全匹配)税肪。
展示 show
列出所有可用的軟件包溉躲,你可以使用 show
命令。
composer show
如果你想看到一個包的詳細信息寸认,你可以輸入一個包名稱签财。
composer show monolog/monolog
name : monolog/monolog
versions : master-dev, 1.0.2, 1.0.1, 1.0.0, 1.0.0-RC1
type : library
names : monolog/monolog
source : [git] http://github.com/Seldaek/monolog.git 3d4e60d0cbc4b888fe5ad223d77964428b1978da
dist : [zip] http://github.com/Seldaek/monolog/zipball/3d4e60d0cbc4b888fe5ad223d77964428b1978da 3d4e60d0cbc4b888fe5ad223d77964428b1978da
license : MIT
autoload
psr-0
Monolog : src/
requires
php >=5.3.0
你甚至可以輸入一個軟件包的版本號,來顯示該版本的詳細信息偏塞。
composer show monolog/monolog 1.0.2
展示-參數(shù)
- --installed (-i): 列出已安裝的依賴包。
- --platform (-p): 僅列出平臺軟件包(PHP 與它的擴展)邦鲫。
- --self (-s): 僅列出當(dāng)前項目信息灸叼。
依賴性檢測 depends
depends
命令可以查出已安裝在你項目中的某個包,是否正在被其它的包所依賴庆捺,并列出他們古今。
composer depends --link-type=require monolog/monolog
nrk/monolog-fluent
poc/poc
propel/propel
symfony/monolog-bridge
symfony/symfony
依賴性檢測-參數(shù)
-
--link-type: 檢測的類型,默認(rèn)為
require
也可以是require-dev
滔以。
有效性檢測 validate
在提交 composer.json
文件捉腥,和創(chuàng)建 tag 前,你應(yīng)該始終運行 validate
命令你画。它將檢測你的 composer.json
文件是否是有效的
composer validate
有效性檢測參數(shù)
- --no-check-all: Composer 是否進行完整的校驗抵碟。
依賴包狀態(tài)檢測 status
如果你經(jīng)常修改依賴包里的代碼桃漾,并且它們是從 source(自定義源)進行安裝的,那么 status
命令允許你進行檢查拟逮,如果你有任何本地的更改它將會給予提示撬统。
composer status
你可以使用 --verbose
系列參數(shù)(-v|vv|vvv)來獲取更詳細的詳細:
composer status -v
You have changes in the following dependencies:
vendor/seld/jsonlint:
M README.mdown
自我更新 self-update
將 Composer 自身升級到最新版本,只需要運行 self-update
命令敦迄。它將替換你的 composer.phar
文件到最新版本恋追。
composer self-update
如果你想要升級到一個特定的版本,可以這樣簡單的指定它:
composer self-update 1.0.0-alpha7
如果你已經(jīng)為整個系統(tǒng)安裝 Composer(參見 全局安裝)罚屋,你可能需要在 root
權(quán)限下運行它:
sudo composer self-update
自我更新-參數(shù)
- --rollback (-r): 回滾到你已經(jīng)安裝的最后一個版本苦囱。
- --clean-backups: 在更新過程中刪除舊的備份,這使得更新過后的當(dāng)前版本是唯一可用的備份脾猛。
更改配置 config
config
命令允許你編輯 Composer 的一些基本設(shè)置沿彭,無論是本地的 composer.json
或者全局的 config.json
文件。
composer config --list
更改配置-使用方法
config [options] [setting-key] [setting-value1] ... [setting-valueN]
setting-key
是一個配置選項的名稱尖滚,setting-value1
是一個配置的值喉刘。可以使用數(shù)組作為配置的值(像 github-protocols
)漆弄,多個 setting-value
是允許的睦裳。
有效的配置選項,請查看“架構(gòu)”章節(jié)的 config 撼唾。
更改配置-參數(shù)
-
--global (-g): 操作位于
$COMPOSER_HOME/config.json
的全局配置文件廉邑。如果不指定該參數(shù),此命令將影響當(dāng)前項目的 composer.json 文件倒谷,或--file
參數(shù)所指向的文件蛛蒙。 -
--editor (-e): 使用文本編輯器打開 composer.json 文件。默認(rèn)情況下始終是打開當(dāng)前項目的文件渤愁。當(dāng)存在
--global
參數(shù)時牵祟,將會打開全局 composer.json 文件。 -
--unset: 移除由
setting-key
指定名稱的配置選項抖格。 -
--list (-l): 顯示當(dāng)前配置選項的列表诺苹。當(dāng)存在
--global
參數(shù)時,將會顯示全局配置選項的列表雹拄。 -
--file="..." (-f): 在一個指定的文件上操作收奔,而不是 composer.json。注意:不能與
--global
參數(shù)一起使用滓玖。
修改包來源
除了修改配置選項坪哄, config
命令還支持通過以下方法修改來源信息:
composer config repositories.foo vcs http://github.com/foo/bar
創(chuàng)建項目 create-project
你可以使用 Composer 從現(xiàn)有的包中創(chuàng)建一個新的項目。這相當(dāng)于執(zhí)行了一個 git clone
或 svn checkout
命令后將這個包的依賴安裝到它自己的 vendor 目錄。
此命令有幾個常見的用途:
- 你可以快速的部署你的應(yīng)用翩肌。
- 你可以檢出任何資源包模暗,并開發(fā)它的補丁。
- 多人開發(fā)項目摧阅,可以用它來加快應(yīng)用的初始化汰蓉。
要創(chuàng)建基于 Composer 的新項目,你可以使用 "create-project" 命令棒卷。傳遞一個包名顾孽,它會為你創(chuàng)建項目的目錄。你也可以在第三個參數(shù)中指定版本號比规,否則將獲取最新的版本若厚。
如果該目錄目前不存在,則會在安裝過程中自動創(chuàng)建蜒什。
composer create-project doctrine/orm path 2.2.*
此外测秸,你也可以無需使用這個命令,而是通過現(xiàn)有的 composer.json
文件來啟動這個項目灾常。
默認(rèn)情況下霎冯,這個命令會在 packagist.org 上查找你指定的包。
創(chuàng)建項目-參數(shù)
-
--repository-url: 提供一個自定義的儲存庫來搜索包钞瀑,這將被用來代替 packagist.org沈撞。可以是一個指向
composer
資源庫的 HTTP URL雕什,或者是指向某個packages.json
文件的本地路徑缠俺。 -
--stability (-s): 資源包的最低穩(wěn)定版本,默認(rèn)為
stable
贷岸。 -
--prefer-source: 當(dāng)有可用的包時壹士,從
source
安裝。 -
--prefer-dist: 當(dāng)有可用的包時偿警,從
dist
安裝躏救。 -
--dev: 安裝
require-dev
字段中列出的包。 - --no-install: 禁止安裝包的依賴户敬。
- --no-plugins: 禁用 plugins落剪。
- --no-scripts: 禁止在根資源包中定義的腳本執(zhí)行。
- --no-progress: 移除進度信息尿庐,這可以避免一些不處理換行的終端或腳本出現(xiàn)混亂的顯示。
- --keep-vcs: 創(chuàng)建時跳過缺失的 VCS 呢堰。如果你在非交互模式下運行創(chuàng)建命令抄瑟,這將是非常有用的。
打印自動加載索引 dump-autoload
某些情況下你需要更新 autoloader,例如在你的包中加入了一個新的類皮假。你可以使用 dump-autoload
來完成鞋拟,而不必執(zhí)行 install
或 update
命令。
此外惹资,它可以打印一個優(yōu)化過的贺纲,符合 PSR-0/4 規(guī)范的類的索引,這也是出于對性能的可考慮猴誊。在大型的應(yīng)用中會有許多類文件,而 autoloader 會占用每個請求的很大一部分時間侮措,使用 classmaps 或許在開發(fā)時不太方便懈叹,但它在保證性能的前提下,仍然可以獲得 PSR-0/4 規(guī)范帶來的便利分扎。
打印自動加載索引-參數(shù)
- --optimize (-o): 轉(zhuǎn)換 PSR-0/4 autoloading 到 classmap 獲得更快的載入速度澄成。這特別適用于生產(chǎn)環(huán)境,但可能需要一些時間來運行畏吓,因此它目前不是默認(rèn)設(shè)置墨状。
- --no-dev: 禁用 autoload-dev 規(guī)則。
查看許可協(xié)議 licenses
列出已安裝的每個包的名稱菲饼、版本肾砂、許可協(xié)議“头啵可以使用 --format=json
參數(shù)來獲取 JSON 格式的輸出通今。
執(zhí)行腳本 run-script
你可以運行此命令來手動執(zhí)行 腳本,只需要指定腳本的名稱肛根,可選的 --no-dev
參數(shù)允許你禁用開發(fā)者模式辫塌。
診斷 diagnose
如果你覺得發(fā)現(xiàn)了一個 bug 或是程序行為變得怪異,你可能需要運行 diagnose
命令派哲,來幫助你檢測一些常見的問題臼氨。
composer diagnose
歸檔 archive
此命令用來對指定包的指定版本進行 zip/tar 歸檔。它也可以用來歸檔你的整個項目芭届,不包括 excluded/ignored(排除/忽略)的文件储矩。
composer archive vendor/package 2.0.21 --format=zip
歸檔-參數(shù)
- --format (-f): 指定歸檔格式:tar 或 zip(默認(rèn)為 tar)。
- --dir: 指定歸檔存放的目錄(默認(rèn)為當(dāng)前目錄)褂乍。
獲取幫助信息 help
使用 help
可以獲取指定命令的幫助信息持隧。
composer help install
環(huán)境變量
你可以設(shè)置一些環(huán)境變量來覆蓋默認(rèn)的配置。建議盡可能的在 composer.json
的 config
字段中設(shè)置這些值逃片,而不是通過命令行設(shè)置環(huán)境變量屡拨。值得注意的是環(huán)境變量中的值,將始終優(yōu)先于 composer.json
中所指定的值。
COMPOSER
環(huán)境變量 COMPOSER
可以為 composer.json
文件指定其它的文件名呀狼。
例如:
COMPOSER=composer-other.json php composer.phar install
COMPOSER_ROOT_VERSION
通過設(shè)置這個環(huán)境變量裂允,你可以指定 root 包的版本,如果程序不能從 VCS 上猜測出版本號哥艇,并且未在 composer.json
文件中申明绝编。
COMPOSER_VENDOR_DIR
通過設(shè)置這個環(huán)境變量,你可以指定 composer 將依賴安裝在 vendor
以外的其它目錄中貌踏。
COMPOSER_BIN_DIR
通過設(shè)置這個環(huán)境變量十饥,你可以指定 bin
(Vendor Binaries)目錄到 vendor/bin
以外的其它目錄。
http_proxy or HTTP_PROXY
如果你是通過 HTTP 代理來使用 Composer哩俭,你可以使用 http_proxy
或 HTTP_PROXY
環(huán)境變量绷跑。只要簡單的將它設(shè)置為代理服務(wù)器的 URL。許多操作系統(tǒng)已經(jīng)為你的服務(wù)設(shè)置了此變量凡资。
建議使用 http_proxy
(小寫)或者兩者都進行定義砸捏。因為某些工具,像 git 或 curl 將使用 http_proxy
小寫的版本隙赁。另外垦藏,你還可以使用 git config --global http.proxy <proxy url>
來單獨設(shè)置 git 的代理。
no_proxy
如果你是使用代理服務(wù)器伞访,并且想要對某些域名禁用代理掂骏,就可以使用 no_proxy
環(huán)境變量。只需要輸入一個逗號相隔的域名 排除 列表厚掷。
此環(huán)境變量接受域名续誉、IP 以及 CIDR地址塊辖试。你可以將它限制到一個端口(例如::80
)伊约。你還可以把它設(shè)置為 *
來忽略所有的 HTTP 代理請求嘁信。
HTTP_PROXY_REQUEST_FULLURI
如果你使用了 HTTP 代理,但它不支持 request_fulluri
標(biāo)簽抡爹,那么你應(yīng)該設(shè)置這個環(huán)境變量為 false
或 0
掩驱,來防止 composer 從 request_fulluri
讀取配置。
HTTPS_PROXY_REQUEST_FULLURI
如果你使用了 HTTPS 代理冬竟,但它不支持 request_fulluri
標(biāo)簽欧穴,那么你應(yīng)該設(shè)置這個環(huán)境變量為 false
或 0
,來防止 composer 從 request_fulluri
讀取配置泵殴。
COMPOSER_HOME
COMPOSER_HOME
環(huán)境變量允許你改變 Composer 的主目錄涮帘。這是一個隱藏的、所有項目共享的全局目錄(對本機的所有用戶都可用)笑诅。
它在各個系統(tǒng)上的默認(rèn)值分別為:
- *nix
/home/<user>/.composer
焚辅。 - OSX
/Users/<user>/.composer
映屋。 - Windows
C:\Users\<user>\AppData\Roaming\Composer
苟鸯。
COMPOSER_HOME/config.json
你可以在 COMPOSER_HOME
目錄中放置一個 config.json
文件同蜻。在你執(zhí)行 install
和 update
命令時,Composer 會將它與你項目中的 composer.json
文件進行合并早处。
該文件允許你為用戶的項目設(shè)置 配置信息 和 資源庫湾蔓。
若 全局 和 項目 存在相同配置項,那么項目中的 composer.json
文件擁有更高的優(yōu)先級砌梆。
COMPOSER_CACHE_DIR
COMPOSER_CACHE_DIR
環(huán)境變量允許你設(shè)置 Composer 的緩存目錄默责,這也可以通過 cache-dir
進行配置。
它在各個系統(tǒng)上的默認(rèn)值分別為:
- *nix and OSX
$COMPOSER_HOME/cache
咸包。 - Windows
C:\Users\<user>\AppData\Local\Composer
或%LOCALAPPDATA%/Composer
桃序。
COMPOSER_PROCESS_TIMEOUT
這個環(huán)境變量控制著 Composer 執(zhí)行命令的等待時間(例如:git 命令)。默認(rèn)值為300秒(5分鐘)烂瘫。
COMPOSER_DISCARD_CHANGES
這個環(huán)境變量控制著 discard-changes config option媒熊。
COMPOSER_NO_INTERACTION
如果設(shè)置為1,這個環(huán)境變量將使 Composer 在執(zhí)行每一個命令時都放棄交互坟比,相當(dāng)于對所有命令都使用了 --no-interaction
芦鳍。可以在搭建 虛擬機/持續(xù)集成服務(wù)器 時這樣設(shè)置葛账。
{
"repositories": [
{
"packagist": false
}
]
}