本文檔根據(jù)Composer中國官方文檔經(jīng)過整理編排而成,相對官方文檔更符合常規(guī)的思維和操作習(xí)慣,方便上手,內(nèi)容比較全,但如需更詳細(xì)的內(nèi)容,請查看官方文檔
簡介
Composer 是 PHP 的一個(gè)依賴管理工具。它允許你申明項(xiàng)目所依賴的代碼庫,它會(huì)在你的項(xiàng)目中為你安裝他們。
安裝 - Windows
使用安裝程序
這是將 Composer 安裝在你機(jī)器上的最簡單的方法。
下載并且運(yùn)行 Composer-Setup.exe,它將安裝最新版本的 Composer ,并設(shè)置好系統(tǒng)的環(huán)境變量,因此你可以在任何目錄下直接使用 composer 命令。
安裝 - *nix
下載 Composer 的可執(zhí)行文件
局部安裝
要真正獲取 Composer,我們需要做兩件事。首先安裝 Composer (同樣的,這意味著它將下載到你的項(xiàng)目中):
curl -sS https://getcomposer.org/installer | php
你可以通過 --install-dir 選項(xiàng)指定 Composer 的安裝目錄(它可以是一個(gè)絕對或相對路徑):
curl -sS https://getcomposer.org/installer | php -- --install-dir=bin
全局安裝
你可以將此文件放在任何地方。如果你把它放在系統(tǒng)的 PATH 目錄中,你就能在全局訪問它。 在類Unix系統(tǒng)中,你甚至可以在使用時(shí)不加 php 前綴。
你可以執(zhí)行這些命令讓 composer 在你的系統(tǒng)中進(jìn)行全局調(diào)用:
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
配置 Packagist 鏡像
修改 composer 的全局配置文件(推薦方式)
打開命令行窗口(windows用戶)或控制臺(tái)(Linux、Mac 用戶)并執(zhí)行如下命令:
因?yàn)镃omposer中國鏡像比較慢,這里推薦使用阿里云鏡像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
使用 Composer
如果你進(jìn)行了全局安裝,并且沒有 phar 文件在當(dāng)前目錄,請使用下面的命令代替:
要檢查 Composer 是否正常工作,只需要在命令行輸入:
composer
這將返回給你一個(gè)可執(zhí)行的命令列表。
初始化項(xiàng)目 init
在 “庫” 那一章我們看到了如何手動(dòng)創(chuàng)建 composer.json 文件。實(shí)際上還有一個(gè) init 命令可以更容易的做到這一點(diǎn)。
當(dāng)您運(yùn)行該命令,它會(huì)以交互方式要求您填寫一些信息,同時(shí)聰明的使用一些默認(rèn)值。
composer init
初始化-參數(shù)
- --name: 包的名稱。
- --description: 包的描述。
- --author: 包的作者。
- --homepage: 包的主頁。
-
--require: 需要依賴的其它包,必須要有一個(gè)版本約束。并且應(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
在添加或改變依賴時(shí), 修改后的依賴關(guān)系將被安裝或者更新。
如果你不希望通過交互來指定依賴包,你可以在這條令中直接指明依賴包。
composer require vendor/package:2.* vendor/package2:dev-master
申明依賴-參數(shù)
-
--prefer-source: 當(dāng)有可用的包時(shí),從
source安裝。 -
--prefer-dist: 當(dāng)有可用的包時(shí),從
dist安裝。 -
--dev: 安裝
require-dev字段中列出的包。 - --no-update: 禁用依賴關(guān)系的自動(dòng)更新。
- --no-progress: 移除進(jìn)度信息,這可以避免一些不處理換行的終端或腳本出現(xiàn)混亂的顯示。
- --update-with-dependencies 一并更新新裝包的依賴。
全局執(zhí)行 global
global 命令允許你在 COMPOSER_HOME 目錄下執(zhí)行其它命令,像 install、require 或 update。
并且如果你將 $COMPOSER_HOME/vendor/bin 加入到了 $PATH 環(huán)境變量中,你就可以用它在命令行中安裝全局應(yīng)用,下面是一個(gè)例子:
composer global require fabpot/php-cs-fixer:dev-master
現(xiàn)在 php-cs-fixer 就可以在全局范圍使用了(假設(shè)你已經(jīng)設(shè)置了你的 PATH)。如果稍后你想更新它,你只需要運(yùn)行 global update:
composer global update
安裝 install
install 命令從當(dāng)前目錄讀取 composer.json 文件,處理了依賴關(guān)系,并把其安裝到 vendor 目錄下。
composer install
如果當(dāng)前目錄下存在 composer.lock 文件,它會(huì)從此文件讀取依賴版本,而不是根據(jù) composer.json 文件去獲取依賴。這確保了該庫的每個(gè)使用者都能得到相同的依賴版本。
如果沒有 composer.lock 文件,composer 將在處理完依賴關(guān)系后創(chuàng)建它。
安裝-參數(shù)
-
--prefer-source: 下載包的方式有兩種:
source和dist。對于穩(wěn)定版本 composer 將默認(rèn)使用dist方式。而source表示版本控制源 。如果--prefer-source是被啟用的,composer 將從source安裝(如果有的話)。如果想要使用一個(gè) bugfix 到你的項(xiàng)目,這是非常有用的。并且可以直接從本地的版本庫直接獲取依賴關(guān)系。 -
--prefer-dist: 與
--prefer-source相反,composer 將盡可能的從dist獲取,這將大幅度的加快在 build servers 上的安裝。這也是一個(gè)回避 git 問題的途徑,如果你不清楚如何正確的設(shè)置。 -
--dry-run: 如果你只是想演示而并非實(shí)際安裝一個(gè)包,你可以運(yùn)行
--dry-run命令,它將模擬安裝并顯示將會(huì)發(fā)生什么。 -
--dev: 安裝
require-dev字段中列出的包(這是一個(gè)默認(rèn)值)。 -
--no-dev: 跳過
require-dev字段中列出的包。 -
--no-scripts: 跳過
composer.json文件中定義的腳本。 - --no-plugins: 關(guān)閉 plugins。
- --no-progress: 移除進(jìn)度信息,這可以避免一些不處理換行的終端或腳本出現(xiàn)混亂的顯示。
- --optimize-autoloader (-o): 轉(zhuǎn)換 PSR-0/4 autoloading 到 classmap 可以獲得更快的加載支持。特別是在生產(chǎn)環(huán)境下建議這么做,但由于運(yùn)行需要一些時(shí)間,因此并沒有作為默認(rèn)值。
更新 update
為了獲取依賴的最新版本,并且升級(jí) composer.lock 文件,你應(yīng)該使用 update 命令。
composer update
這將解決項(xiàng)目的所有依賴,并將確切的版本號(hào)寫入 composer.lock。
如果你只是想更新幾個(gè)包,你可以像這樣分別列出它們:
composer update vendor/package vendor/package2
你還可以使用通配符進(jìn)行批量更新:
composer update vendor/*
更新-參數(shù)
-
--prefer-source: 當(dāng)有可用的包時(shí),從
source安裝。 -
--prefer-dist: 當(dāng)有可用的包時(shí),從
dist安裝。 - --dry-run: 模擬命令,并沒有做實(shí)際的操作。
-
--dev: 安裝
require-dev字段中列出的包(這是一個(gè)默認(rèn)值)。 -
--no-dev: 跳過
require-dev字段中列出的包。 -
--no-scripts: 跳過
composer.json文件中定義的腳本。 - --no-plugins: 關(guān)閉 plugins。
- --no-progress: 移除進(jìn)度信息,這可以避免一些不處理換行的終端或腳本出現(xiàn)混亂的顯示。
- --optimize-autoloader (-o): 轉(zhuǎn)換 PSR-0/4 autoloading 到 classmap 可以獲得更快的加載支持。特別是在生產(chǎn)環(huán)境下建議這么做,但由于運(yùn)行需要一些時(shí)間,因此并沒有作為默認(rèn)值。
- --lock: 僅更新 lock 文件的 hash,取消有關(guān) lock 文件過時(shí)的警告。
- --with-dependencies 同時(shí)更新白名單內(nèi)包的依賴關(guān)系,這將進(jìn)行遞歸更新。
搜索 search
search 命令允許你為當(dāng)前項(xiàng)目搜索依賴包,通常它只搜索 packagist.org 上的包,你可以簡單的輸入你的搜索條件。
composer search monolog
您也可以通過傳遞多個(gè)參數(shù)來進(jìn)行多條件搜索。
搜索-參數(shù)
- --only-name (-N): 僅針對指定的名稱搜索(完全匹配)。
展示 show
列出所有可用的軟件包,你可以使用 show 命令。
composer show
如果你想看到一個(gè)包的詳細(xì)信息,你可以輸入一個(gè)包名稱。
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
你甚至可以輸入一個(gè)軟件包的版本號(hào),來顯示該版本的詳細(xì)信息。
composer show monolog/monolog 1.0.2
包名稱
包名稱由供應(yīng)商名稱和其項(xiàng)目名稱構(gòu)成。通常容易產(chǎn)生相同的項(xiàng)目名稱,而供應(yīng)商名稱的存在則很好的解決了命名沖突的問題。它允許兩個(gè)不同的人創(chuàng)建同樣名為 json 的庫,而之后它們將被命名為 igorw/json 和 seldaek/json。
這里我們需要引入 monolog/monolog,供應(yīng)商名稱與項(xiàng)目的名稱相同,對于一個(gè)具有唯一名稱的項(xiàng)目,我們推薦這么做。它還允許以后在同一個(gè)命名空間添加更多的相關(guān)項(xiàng)目。如果你維護(hù)著一個(gè)庫,這將使你可以很容易的把它分離成更小的部分。
包版本
在前面的例子中,我們引入的 monolog 版本指定為 1.0.*。這表示任何從 1.0 開始的開發(fā)分支,它將會(huì)匹配 1.0.0、1.0.2 或者 1.0.20。
版本約束可以用幾個(gè)不同的方法來指定。
| 名稱 | 實(shí)例 | 描述 | ||
|---|---|---|---|---|
| 確切的版本號(hào) | 1.0.2 |
你可以指定包的確切版本。 | ||
| 范圍 |
>=1.0 `>=1.0,<2.0``>=1.0,<1.1 |
>=1.2` | 通過使用比較操作符可以指定有效的版本范圍。 有效的運(yùn)算符:>、>=、<、<=、!=。 你可以定義多個(gè)范圍,用逗號(hào)隔開,這將被視為一個(gè)邏輯AND處理。一個(gè)管道符號(hào)` |
`將作為邏輯OR處理。 AND 的優(yōu)先級(jí)高于 OR。 |
| 通配符 | 1.0.* |
你可以使用通配符*來指定一種模式。1.0.*與>=1.0,<1.1是等效的。 |
||
| 賦值運(yùn)算符 | ~1.2 |
這對于遵循語義化版本號(hào)的項(xiàng)目非常有用。~1.2相當(dāng)于>=1.2,<2.0。想要了解更多,請閱讀下一小節(jié)。 |
下一個(gè)重要版本(波浪號(hào)運(yùn)算符)
~ 最好用例子來解釋: ~1.2 相當(dāng)于 >=1.2,<2.0,而 ~1.2.3 相當(dāng)于 >=1.2.3,<1.3。正如你所看到的這對于遵循 語義化版本號(hào) 的項(xiàng)目最有用。一個(gè)常見的用法是標(biāo)記你所依賴的最低版本,像 ~1.2 (允許1.2以上的任何版本,但不包括2.0)。由于理論上直到2.0應(yīng)該都沒有向后兼容性問題,所以效果很好。你還會(huì)看到它的另一種用法,使用 ~ 指定最低版本,但允許版本號(hào)的最后一位數(shù)字上升。
注意: 雖然
2.0-beta.1嚴(yán)格地說是早于2.0,但是,根據(jù)版本約束條件, 例如~1.2卻不會(huì)安裝這個(gè)版本。就像前面所講的~1.2只意味著.2部分可以改變,但是1.部分是固定的。
穩(wěn)定性
默認(rèn)情況下只有穩(wěn)定的發(fā)行版才會(huì)被考慮在內(nèi)。如果你也想獲得 RC、beta、alpha 或 dev 版本,你可以使用 穩(wěn)定標(biāo)志。你可以對所有的包做 最小穩(wěn)定性 設(shè)置,而不是每個(gè)依賴逐一設(shè)置。
安裝依賴包
獲取定義的依賴到你的本地項(xiàng)目,只需要調(diào)用 composer 運(yùn)行 install 命令。
composer install
接著前面的例子,這將會(huì)找到 monolog/monolog 的最新版本,并將它下載到 vendor 目錄。 這是一個(gè)慣例把第三方的代碼到一個(gè)指定的目錄 vendor。如果是 monolog 將會(huì)創(chuàng)建 vendor/monolog/monolog 目錄。
小技巧: 如果你正在使用Git來管理你的項(xiàng)目, 你可能要添加
vendor到你的.gitignore文件中。 你不會(huì)希望將所有的代碼都添加到你的版本庫中。
另一件事是 install 命令將創(chuàng)建一個(gè) composer.lock 文件到你項(xiàng)目的根目錄中。
composer.lock - 鎖文件
在安裝依賴后,Composer 將把安裝時(shí)確切的版本號(hào)列表寫入 composer.lock 文件。這將鎖定改項(xiàng)目的特定版本。
請?zhí)峤荒銘?yīng)用程序的 composer.lock (包括 composer.json)到你的版本庫中
這是非常重要的,因?yàn)?install 命令將會(huì)檢查鎖文件是否存在,如果存在,它將下載指定的版本(忽略 composer.json 文件中的定義)。
這意味著,任何人建立項(xiàng)目都將下載與指定版本完全相同的依賴。你的持續(xù)集成服務(wù)器、生產(chǎn)環(huán)境、你團(tuán)隊(duì)中的其他開發(fā)人員、每件事、每個(gè)人都使用相同的依賴,從而減輕潛在的錯(cuò)誤對部署的影響。即使你獨(dú)自開發(fā)項(xiàng)目,在六個(gè)月內(nèi)重新安裝項(xiàng)目時(shí),你也可以放心的繼續(xù)工作,即使從那時(shí)起你的依賴已經(jīng)發(fā)布了許多新的版本。
如果不存在 composer.lock 文件,Composer 將讀取 composer.json 并創(chuàng)建鎖文件。
這意味著如果你的依賴更新了新的版本,你將不會(huì)獲得任何更新。此時(shí)要更新你的依賴版本請使用 update 命令。這將獲取最新匹配的版本(根據(jù)你的 composer.json 文件)并將新版本更新進(jìn)鎖文件。
php composer.phar update
如果只想安裝或更新一個(gè)依賴,你可以白名單它們:
php composer.phar update monolog/monolog [...]
注意: 對于庫,并不一定建議提交鎖文件 請參考:庫的鎖文件.
自動(dòng)加載
對于庫的自動(dòng)加載信息,Composer 生成了一個(gè) vendor/autoload.php 文件。你可以簡單的引入這個(gè)文件,你會(huì)得到一個(gè)免費(fèi)的自動(dòng)加載支持。
require 'vendor/autoload.php';
這使得你可以很容易的使用第三方代碼。例如:如果你的項(xiàng)目依賴 monolog,你就可以像這樣開始使用這個(gè)類庫,并且他們將被自動(dòng)加載。
$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 將注冊一個(gè) PSR-4 autoloader 到 Acme 命名空間。
你可以定義一個(gè)從命名空間到目錄的映射。此時(shí) src 會(huì)在你項(xiàng)目的根目錄,與 vendor 文件夾同級(jí)。例如 src/Foo.php 文件應(yīng)該包含 Acme\Foo 類。
添加 autoload 字段后,你應(yīng)該再次運(yùn)行 install 命令來生成 vendor/autoload.php 文件。
引用這個(gè)文件也將返回 autoloader 的實(shí)例,你可以將包含調(diào)用的返回值存儲(chǔ)在變量中,并添加更多的命名空間。這對于在一個(gè)測試套件中自動(dòng)加載類文件是非常有用的,例如。
$loader = require 'vendor/autoload.php';
$loader->add('Acme\\Test\\', __DIR__);
除了 PSR-4 自動(dòng)加載,classmap 也是支持的。這允許類被自動(dòng)加載,即使不符合 PSR-0 規(guī)范。詳細(xì)請查看 自動(dòng)加載-參考。
注意: Composer 提供了自己的 autoloader。如果你不想使用它,你可以僅僅引入
vendor/composer/autoload_*.php文件,它返回一個(gè)關(guān)聯(lián)數(shù)組,你可以通過這個(gè)關(guān)聯(lián)數(shù)組配置自己的 autoloader。
庫(資源包)
本章將告訴你如何通過 Composer 來安裝你的庫。
- 庫(資源包)
每一個(gè)項(xiàng)目都是一個(gè)包
<u>只要你有一個(gè) composer.json 文件在目錄中,那么整個(gè)目錄就是一個(gè)包。</u>當(dāng)你添加一個(gè) require 到項(xiàng)目中,你就是在創(chuàng)建一個(gè)依賴于其它庫的包。你的項(xiàng)目和庫之間唯一的區(qū)別是,你的項(xiàng)目是一個(gè)沒有名字的包。
為了使它成為一個(gè)可安裝的包,你需要給它一個(gè)名稱。你可以通過 composer.json 中的 name 來定義:
{
"name": "acme/hello-world",
"require": {
"monolog/monolog": "1.0.*"
}
}
在這種情況下項(xiàng)目的名稱為 acme/hello-world,其中 acme 是供應(yīng)商的名稱。供應(yīng)商的名稱是必須填寫的。
注意: 如果你不知道拿什么作為供應(yīng)商的名稱, 那么使用你 github 上的用戶名通常是不錯(cuò)的選擇。 雖然包名不區(qū)分大小寫,但慣例是使用小寫字母,并用連字符作為單詞的分隔。
平臺(tái)軟件包
Composer 將那些已經(jīng)安裝在系統(tǒng)上,但并不是由 Composer 安裝的包視為一個(gè)虛擬的平臺(tái)軟件包。這包括PHP本身,PHP擴(kuò)展和一些系統(tǒng)庫。
-
php表示用戶的 PHP 版本要求,你可以對其做出限制。例如>=5.4.0。如果需要64位版本的 PHP,你可以使用php-64bit進(jìn)行限制。 -
hhvm代表的是 HHVM(也就是 HipHop Virtual Machine) 運(yùn)行環(huán)境的版本,并且允許你設(shè)置一個(gè)版本限制,例如,'>=2.3.3'。 -
ext-<name>可以幫你指定需要的 PHP 擴(kuò)展(包括核心擴(kuò)展)。通常 PHP 拓展的版本可以是不一致的,將它們的版本約束為*是一個(gè)不錯(cuò)的主意。一個(gè) PHP 擴(kuò)展包的例子:包名可以寫成ext-gd。 -
lib-<name>允許對 PHP 庫的版本進(jìn)行限制。
以下是可供使用的名稱:curl、iconv、icu、libxml、openssl、pcre、uuid、xsl。
你可以使用 composer show --platform 命令來獲取可用的平臺(tái)軟件包的列表。
指明版本
你需要一些方法來指明自己開發(fā)的包的版本,當(dāng)你在 Packagist 上發(fā)布自己的包,它能夠從 VCS (git, svn, hg) 的信息推斷出包的版本,因此你不必手動(dòng)指明版本號(hào),并且也不建議這樣做。請查看 標(biāo)簽 和 分支 來了解版本號(hào)是如何被提取的。
如果你想要手動(dòng)創(chuàng)建并且真的要明確指定它,你只需要添加一個(gè) version 字段:
{
"version": "1.0.0"
}
注意: 你應(yīng)該盡量避免手動(dòng)設(shè)置版本號(hào),因?yàn)闃?biāo)簽的值必須與標(biāo)簽名相匹配。
標(biāo)簽
對于每一個(gè)看起來像版本號(hào)的標(biāo)簽,都會(huì)相應(yīng)的創(chuàng)建一個(gè)包的版本。它應(yīng)該符合 'X.Y.Z' 或者 'vX.Y.Z' 的形式,-patch、-alpha、-beta 或 -RC 這些后綴是可選的。在后綴之后也可以再跟上一個(gè)數(shù)字。
下面是有效的標(biāo)簽名稱的幾個(gè)例子:
- 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一個(gè)版本的約束時(shí)是不允許這種前綴的, 因此v將被省略(例如標(biāo)簽V1.0.0將創(chuàng)建1.0.0版本)。
Packagist 鏡像使用方法
鏡像用法
有兩種方式啟用本鏡像服務(wù):
-
系統(tǒng)全局配置: 即將配置信息添加到 Composer 的全局配置文件
config.json中。見“方法一” -
單個(gè)項(xiàng)目配置: 將配置信息添加到某個(gè)項(xiàng)目的
composer.json文件中。見“方法二”
方法一: 修改 composer 的全局配置文件(推薦方式)
打開命令行窗口(windows用戶)或控制臺(tái)(Linux、Mac 用戶)并執(zhí)行如下命令:
復(fù)制
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í)行如下命令:
復(fù)制
composer config repo.packagist composer https://packagist.phpcomposer.com
上述命令將會(huì)在當(dāng)前項(xiàng)目中的 composer.json 文件的末尾自動(dòng)添加鏡像的配置信息(你也可以自己手工添加):
復(fù)制
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
}
以 laravel 項(xiàng)目的 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 來體驗(yàn)飛一般的速度吧!
鏡像原理:
一般情況下,安裝包的數(shù)據(jù)(主要是 zip 文件)一般是從 github.com 上下載的,安裝包的元數(shù)據(jù)是從 packagist.org 上下載的。
然而,由于眾所周知的原因,國外的網(wǎng)站連接速度很慢,并且隨時(shí)可能被“墻”甚至“不存在”。
“Packagist 中國全量鏡像”所做的就是緩存所有安裝包和元數(shù)據(jù)到國內(nèi)的機(jī)房并通過國內(nèi)的 CDN 進(jìn)行加速,這樣就不必再去向國外的網(wǎng)站發(fā)起請求,從而達(dá)到加速 composer install以及 composer update 的過程,并且更加快速、穩(wěn)定。因此,即使 packagist.org、github.com 發(fā)生故障(主要是連接速度太慢和被墻),你仍然可以下載、更新安裝包。
解除鏡象:
如果需要解除鏡像并恢復(fù)到 packagist 官方源,請執(zhí)行以下命令:
復(fù)制
composer config -g --unset repos.packagist
執(zhí)行之后,composer 會(huì)利用默認(rèn)值(也就是官方源)重置源地址。
將來如果還需要使用鏡像的話,只需要根據(jù)前面的“鏡像用法”中介紹的方法再次設(shè)置鏡像地址即可。
命令行
你已經(jīng)學(xué)會(huì)了如何使用命令行界面做一些事情。本章將向你介紹所有可用的命令。
為了從命令行獲得幫助信息,請運(yùn)行 composer 或者 composer list 命令,然后結(jié)合 --help 命令來獲得更多的幫助信息。
- 命令行
- 全局參數(shù)
- 進(jìn)程退出代碼
-
初始化
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)建項(xiàng)目
create-project- - 參數(shù) -
打印自動(dòng)加載索引
dump-autoload- - 參數(shù) - 查看許可協(xié)議
licenses - 執(zhí)行腳本
run-script - 診斷
diagnose -
歸檔
archive- - 參數(shù) - 獲取幫助信息
help - 環(huán)境變量
全局參數(shù)
下列參數(shù)可與每一個(gè)命令結(jié)合使用:
-
--verbose (-v):
增加反饋信息的詳細(xì)度。
- -v 表示正常輸出。
- -vv 表示更詳細(xì)的輸出。
- -vvv 則是為了 debug。
--help (-h): 顯示幫助信息。
--quiet (-q): 禁止輸出任何信息。
--no-interaction (-n): 不要詢問任何交互問題。
--working-dir (-d): 如果指定的話,使用給定的目錄作為工作目錄。
--profile: 顯示時(shí)間和內(nèi)存使用信息。
--ansi: 強(qiáng)制 ANSI 輸出。
--no-ansi: 關(guān)閉 ANSI 輸出。
--version (-V): 顯示當(dāng)前應(yīng)用程序的版本信息。
進(jìn)程退出代碼
- 0: 正常
- 1: 通用/未知錯(cuò)誤
- 2: 依賴關(guān)系處理錯(cuò)誤
初始化 init
在 “庫” 那一章我們看到了如何手動(dòng)創(chuàng)建 composer.json 文件。實(shí)際上還有一個(gè) init 命令可以更容易的做到這一點(diǎn)。
當(dāng)您運(yùn)行該命令,它會(huì)以交互方式要求您填寫一些信息,同時(shí)聰明的使用一些默認(rèn)值。
composer init
初始化-參數(shù)
- --name: 包的名稱。
- --description: 包的描述。
- --author: 包的作者。
- --homepage: 包的主頁。
-
--require: 需要依賴的其它包,必須要有一個(gè)版本約束。并且應(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
在添加或改變依賴時(shí), 修改后的依賴關(guān)系將被安裝或者更新。
如果你不希望通過交互來指定依賴包,你可以在這條令中直接指明依賴包。
composer require vendor/package:2.* vendor/package2:dev-master
申明依賴-參數(shù)
-
--prefer-source: 當(dāng)有可用的包時(shí),從
source安裝。 -
--prefer-dist: 當(dāng)有可用的包時(shí),從
dist安裝。 -
--dev: 安裝
require-dev字段中列出的包。 - --no-update: 禁用依賴關(guān)系的自動(dòng)更新。
- --no-progress: 移除進(jìn)度信息,這可以避免一些不處理換行的終端或腳本出現(xiàn)混亂的顯示。
- --update-with-dependencies 一并更新新裝包的依賴。
全局執(zhí)行 global
global 命令允許你在 COMPOSER_HOME 目錄下執(zhí)行其它命令,像 install、require 或 update。
并且如果你將 $COMPOSER_HOME/vendor/bin 加入到了 $PATH 環(huán)境變量中,你就可以用它在命令行中安裝全局應(yīng)用,下面是一個(gè)例子:
composer global require fabpot/php-cs-fixer:dev-master
現(xiàn)在 php-cs-fixer 就可以在全局范圍使用了(假設(shè)你已經(jīng)設(shè)置了你的 PATH)。如果稍后你想更新它,你只需要運(yùn)行 global update:
composer global update
安裝 install
install 命令從當(dāng)前目錄讀取 composer.json 文件,處理了依賴關(guān)系,并把其安裝到 vendor 目錄下。
composer install
如果當(dāng)前目錄下存在 composer.lock 文件,它會(huì)從此文件讀取依賴版本,而不是根據(jù) composer.json 文件去獲取依賴。這確保了該庫的每個(gè)使用者都能得到相同的依賴版本。
如果沒有 composer.lock 文件,composer 將在處理完依賴關(guān)系后創(chuàng)建它。
安裝-參數(shù)
-
--prefer-source: 下載包的方式有兩種:
source和dist。對于穩(wěn)定版本 composer 將默認(rèn)使用dist方式。而source表示版本控制源 。如果--prefer-source是被啟用的,composer 將從source安裝(如果有的話)。如果想要使用一個(gè) bugfix 到你的項(xiàng)目,這是非常有用的。并且可以直接從本地的版本庫直接獲取依賴關(guān)系。 -
--prefer-dist: 與
--prefer-source相反,composer 將盡可能的從dist獲取,這將大幅度的加快在 build servers 上的安裝。這也是一個(gè)回避 git 問題的途徑,如果你不清楚如何正確的設(shè)置。 -
--dry-run: 如果你只是想演示而并非實(shí)際安裝一個(gè)包,你可以運(yùn)行
--dry-run命令,它將模擬安裝并顯示將會(huì)發(fā)生什么。 -
--dev: 安裝
require-dev字段中列出的包(這是一個(gè)默認(rèn)值)。 -
--no-dev: 跳過
require-dev字段中列出的包。 -
--no-scripts: 跳過
composer.json文件中定義的腳本。 - --no-plugins: 關(guān)閉 plugins。
- --no-progress: 移除進(jìn)度信息,這可以避免一些不處理換行的終端或腳本出現(xiàn)混亂的顯示。
- --optimize-autoloader (-o): 轉(zhuǎn)換 PSR-0/4 autoloading 到 classmap 可以獲得更快的加載支持。特別是在生產(chǎn)環(huán)境下建議這么做,但由于運(yùn)行需要一些時(shí)間,因此并沒有作為默認(rèn)值。
更新 update
為了獲取依賴的最新版本,并且升級(jí) composer.lock 文件,你應(yīng)該使用 update 命令。
composer update
這將解決項(xiàng)目的所有依賴,并將確切的版本號(hào)寫入 composer.lock。
如果你只是想更新幾個(gè)包,你可以像這樣分別列出它們:
composer update vendor/package vendor/package2
你還可以使用通配符進(jìn)行批量更新:
composer update vendor/*
更新-參數(shù)
-
--prefer-source: 當(dāng)有可用的包時(shí),從
source安裝。 -
--prefer-dist: 當(dāng)有可用的包時(shí),從
dist安裝。 - --dry-run: 模擬命令,并沒有做實(shí)際的操作。
-
--dev: 安裝
require-dev字段中列出的包(這是一個(gè)默認(rèn)值)。 -
--no-dev: 跳過
require-dev字段中列出的包。 -
--no-scripts: 跳過
composer.json文件中定義的腳本。 - --no-plugins: 關(guān)閉 plugins。
- --no-progress: 移除進(jìn)度信息,這可以避免一些不處理換行的終端或腳本出現(xiàn)混亂的顯示。
- --optimize-autoloader (-o): 轉(zhuǎn)換 PSR-0/4 autoloading 到 classmap 可以獲得更快的加載支持。特別是在生產(chǎn)環(huán)境下建議這么做,但由于運(yùn)行需要一些時(shí)間,因此并沒有作為默認(rèn)值。
- --lock: 僅更新 lock 文件的 hash,取消有關(guān) lock 文件過時(shí)的警告。
- --with-dependencies 同時(shí)更新白名單內(nèi)包的依賴關(guān)系,這將進(jìn)行遞歸更新。
搜索 search
search 命令允許你為當(dāng)前項(xiàng)目搜索依賴包,通常它只搜索 packagist.org 上的包,你可以簡單的輸入你的搜索條件。
composer search monolog
您也可以通過傳遞多個(gè)參數(shù)來進(jìn)行多條件搜索。
搜索-參數(shù)
- --only-name (-N): 僅針對指定的名稱搜索(完全匹配)。
展示 show
列出所有可用的軟件包,你可以使用 show 命令。
composer show
如果你想看到一個(gè)包的詳細(xì)信息,你可以輸入一個(gè)包名稱。
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
你甚至可以輸入一個(gè)軟件包的版本號(hào),來顯示該版本的詳細(xì)信息。
composer show monolog/monolog 1.0.2
展示-參數(shù)
- --installed (-i): 列出已安裝的依賴包。
- --platform (-p): 僅列出平臺(tái)軟件包(PHP 與它的擴(kuò)展)。
- --self (-s): 僅列出當(dāng)前項(xiàng)目信息。
依賴性檢測 depends
depends 命令可以查出已安裝在你項(xiàng)目中的某個(gè)包,是否正在被其它的包所依賴,并列出他們。
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)該始終運(yùn)行 validate 命令。它將檢測你的 composer.json文件是否是有效的
composer validate
有效性檢測參數(shù)
- --no-check-all: Composer 是否進(jìn)行完整的校驗(yàn)。
依賴包狀態(tài)檢測 status
如果你經(jīng)常修改依賴包里的代碼,并且它們是從 source(自定義源)進(jìn)行安裝的,那么 status 命令允許你進(jìn)行檢查,如果你有任何本地的更改它將會(huì)給予提示。
composer status
你可以使用 --verbose 系列參數(shù)(-v|vv|vvv)來獲取更詳細(xì)的詳細(xì):
composer status -v
You have changes in the following dependencies:
vendor/seld/jsonlint:
M README.mdown
自我更新 self-update
將 Composer 自身升級(jí)到最新版本,只需要運(yùn)行 self-update 命令。它將替換你的 composer.phar 文件到最新版本。
composer self-update
如果你想要升級(jí)到一個(gè)特定的版本,可以這樣簡單的指定它:
composer self-update 1.0.0-alpha7
如果你已經(jīng)為整個(gè)系統(tǒng)安裝 Composer(參見 全局安裝),你可能需要在 root 權(quán)限下運(yùn)行它:
sudo composer self-update
自我更新-參數(shù)
- --rollback (-r): 回滾到你已經(jīng)安裝的最后一個(gè)版本。
- --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 是一個(gè)配置選項(xiàng)的名稱,setting-value1 是一個(gè)配置的值。可以使用數(shù)組作為配置的值(像 github-protocols),多個(gè) setting-value 是允許的。
有效的配置選項(xiàng),請查看“架構(gòu)”章節(jié)的 config 。
更改配置-參數(shù)
-
--global (-g): 操作位于
$COMPOSER_HOME/config.json的全局配置文件。如果不指定該參數(shù),此命令將影響當(dāng)前項(xiàng)目的 composer.json 文件,或--file參數(shù)所指向的文件。 -
--editor (-e): 使用文本編輯器打開 composer.json 文件。默認(rèn)情況下始終是打開當(dāng)前項(xiàng)目的文件。當(dāng)存在
--global參數(shù)時(shí),將會(huì)打開全局 composer.json 文件。 -
--unset: 移除由
setting-key指定名稱的配置選項(xiàng)。 -
--list (-l): 顯示當(dāng)前配置選項(xiàng)的列表。當(dāng)存在
--global參數(shù)時(shí),將會(huì)顯示全局配置選項(xiàng)的列表。 -
--file="..." (-f): 在一個(gè)指定的文件上操作,而不是 composer.json。注意:不能與
--global參數(shù)一起使用。
修改包來源
除了修改配置選項(xiàng), config 命令還支持通過以下方法修改來源信息:
composer config repositories.foo vcs http://github.com/foo/bar
創(chuàng)建項(xiàng)目 create-project
你可以使用 Composer 從現(xiàn)有的包中創(chuàng)建一個(gè)新的項(xiàng)目。這相當(dāng)于執(zhí)行了一個(gè) git clone 或 svn checkout 命令后將這個(gè)包的依賴安裝到它自己的 vendor 目錄。
此命令有幾個(gè)常見的用途:
- 你可以快速的部署你的應(yīng)用。
- 你可以檢出任何資源包,并開發(fā)它的補(bǔ)丁。
- 多人開發(fā)項(xiàng)目,可以用它來加快應(yīng)用的初始化。
要?jiǎng)?chuàng)建基于 Composer 的新項(xiàng)目,你可以使用 "create-project" 命令。傳遞一個(gè)包名,它會(huì)為你創(chuàng)建項(xiàng)目的目錄。你也可以在第三個(gè)參數(shù)中指定版本號(hào),否則將獲取最新的版本。
如果該目錄目前不存在,則會(huì)在安裝過程中自動(dòng)創(chuàng)建。
composer create-project doctrine/orm path 2.2.*
此外,你也可以無需使用這個(gè)命令,而是通過現(xiàn)有的 composer.json 文件來啟動(dòng)這個(gè)項(xiàng)目。
默認(rèn)情況下,這個(gè)命令會(huì)在 packagist.org 上查找你指定的包。
創(chuàng)建項(xiàng)目-參數(shù)
-
--repository-url: 提供一個(gè)自定義的儲(chǔ)存庫來搜索包,這將被用來代替 packagist.org。可以是一個(gè)指向
composer資源庫的 HTTP URL,或者是指向某個(gè)packages.json文件的本地路徑。 -
--stability (-s): 資源包的最低穩(wěn)定版本,默認(rèn)為
stable。 -
--prefer-source: 當(dāng)有可用的包時(shí),從
source安裝。 -
--prefer-dist: 當(dāng)有可用的包時(shí),從
dist安裝。 -
--dev: 安裝
require-dev字段中列出的包。 - --no-install: 禁止安裝包的依賴。
- --no-plugins: 禁用 plugins。
- --no-scripts: 禁止在根資源包中定義的腳本執(zhí)行。
- --no-progress: 移除進(jìn)度信息,這可以避免一些不處理換行的終端或腳本出現(xiàn)混亂的顯示。
- --keep-vcs: 創(chuàng)建時(shí)跳過缺失的 VCS 。如果你在非交互模式下運(yùn)行創(chuàng)建命令,這將是非常有用的。
打印自動(dòng)加載索引 dump-autoload
某些情況下你需要更新 autoloader,例如在你的包中加入了一個(gè)新的類。你可以使用 dump-autoload 來完成,而不必執(zhí)行 install 或 update 命令。
此外,它可以打印一個(gè)優(yōu)化過的,符合 PSR-0/4 規(guī)范的類的索引,這也是出于對性能的可考慮。在大型的應(yīng)用中會(huì)有許多類文件,而 autoloader 會(huì)占用每個(gè)請求的很大一部分時(shí)間,使用 classmaps 或許在開發(fā)時(shí)不太方便,但它在保證性能的前提下,仍然可以獲得 PSR-0/4 規(guī)范帶來的便利。
打印自動(dòng)加載索引-參數(shù)
- --optimize (-o): 轉(zhuǎn)換 PSR-0/4 autoloading 到 classmap 獲得更快的載入速度。這特別適用于生產(chǎn)環(huán)境,但可能需要一些時(shí)間來運(yùn)行,因此它目前不是默認(rèn)設(shè)置。
- --no-dev: 禁用 autoload-dev 規(guī)則。
查看許可協(xié)議 licenses
列出已安裝的每個(gè)包的名稱、版本、許可協(xié)議。可以使用 --format=json 參數(shù)來獲取 JSON 格式的輸出。
執(zhí)行腳本 run-script
你可以運(yùn)行此命令來手動(dòng)執(zhí)行 腳本,只需要指定腳本的名稱,可選的 --no-dev 參數(shù)允許你禁用開發(fā)者模式。
診斷 diagnose
如果你覺得發(fā)現(xiàn)了一個(gè) bug 或是程序行為變得怪異,你可能需要運(yùn)行 diagnose 命令,來幫助你檢測一些常見的問題。
composer diagnose
歸檔 archive
此命令用來對指定包的指定版本進(jìn)行 zip/tar 歸檔。它也可以用來歸檔你的整個(gè)項(xiàng)目,不包括 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è)置這個(gè)環(huán)境變量,你可以指定 root 包的版本,如果程序不能從 VCS 上猜測出版本號(hào),并且未在 composer.json 文件中申明。
COMPOSER_VENDOR_DIR
通過設(shè)置這個(gè)環(huán)境變量,你可以指定 composer 將依賴安裝在 vendor 以外的其它目錄中。
COMPOSER_BIN_DIR
通過設(shè)置這個(gè)環(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(小寫)或者兩者都進(jìn)行定義。因?yàn)槟承┕ぞ?,?git 或 curl 將使用 http_proxy 小寫的版本。另外,你還可以使用 git config --global http.proxy <proxy url> 來單獨(dú)設(shè)置 git 的代理。
no_proxy
如果你是使用代理服務(wù)器,并且想要對某些域名禁用代理,就可以使用 no_proxy 環(huán)境變量。只需要輸入一個(gè)逗號(hào)相隔的域名 排除 列表。
此環(huán)境變量接受域名、IP 以及 CIDR地址塊。你可以將它限制到一個(gè)端口(例如::80)。你還可以把它設(shè)置為 * 來忽略所有的 HTTP 代理請求。
HTTP_PROXY_REQUEST_FULLURI
如果你使用了 HTTP 代理,但它不支持 request_fulluri 標(biāo)簽,那么你應(yīng)該設(shè)置這個(gè)環(huán)境變量為 false 或 0,來防止 composer 從 request_fulluri 讀取配置。
HTTPS_PROXY_REQUEST_FULLURI
如果你使用了 HTTPS 代理,但它不支持 request_fulluri 標(biāo)簽,那么你應(yīng)該設(shè)置這個(gè)環(huán)境變量為 false 或 0 ,來防止 composer 從 request_fulluri 讀取配置。
COMPOSER_HOME
COMPOSER_HOME 環(huán)境變量允許你改變 Composer 的主目錄。這是一個(gè)隱藏的、所有項(xiàng)目共享的全局目錄(對本機(jī)的所有用戶都可用)。
它在各個(gè)系統(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 目錄中放置一個(gè) config.json 文件。在你執(zhí)行 install 和 update 命令時(shí),Composer 會(huì)將它與你項(xiàng)目中的 composer.json 文件進(jìn)行合并。
該文件允許你為用戶的項(xiàng)目設(shè)置 配置信息 和 資源庫。
若 全局 和 項(xiàng)目 存在相同配置項(xiàng),那么項(xiàng)目中的 composer.json 文件擁有更高的優(yōu)先級(jí)。
COMPOSER_CACHE_DIR
COMPOSER_CACHE_DIR 環(huán)境變量允許你設(shè)置 Composer 的緩存目錄,這也可以通過 cache-dir 進(jìn)行配置。
它在各個(gè)系統(tǒng)上的默認(rèn)值分別為:
- *nix and OSX
$COMPOSER_HOME/cache。 - Windows
C:\Users\<user>\AppData\Local\Composer或%LOCALAPPDATA%/Composer。
COMPOSER_PROCESS_TIMEOUT
這個(gè)環(huán)境變量控制著 Composer 執(zhí)行命令的等待時(shí)間(例如:git 命令)。默認(rèn)值為300秒(5分鐘)。
COMPOSER_DISCARD_CHANGES
這個(gè)環(huán)境變量控制著 discard-changes config option。
COMPOSER_NO_INTERACTION
如果設(shè)置為1,這個(gè)環(huán)境變量將使 Composer 在執(zhí)行每一個(gè)命令時(shí)都放棄交互,相當(dāng)于對所有命令都使用了 --no-interaction??梢栽诖罱?虛擬機(jī)/持續(xù)集成服務(wù)器 時(shí)這樣設(shè)置。
{
"repositories": [
{
"packagist": false
}
]
}