Composer 中文文檔

本文檔根據(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í)行其它命令,像 installrequireupdate。

并且如果你將 $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: 下載包的方式有兩種: sourcedist。對于穩(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/jsonseldaek/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.01.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.jsonautoload 字段中增加自己的 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、iculibxml、openssl、pcre、uuidxsl。

你可以使用 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ù)

下列參數(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、requireupdate

并且如果你將 $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: 下載包的方式有兩種: sourcedist。對于穩(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 clonesvn checkout 命令后將這個(gè)包的依賴安裝到它自己的 vendor 目錄。

此命令有幾個(gè)常見的用途:

  1. 你可以快速的部署你的應(yīng)用。
  2. 你可以檢出任何資源包,并開發(fā)它的補(bǔ)丁。
  3. 多人開發(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í)行 installupdate 命令。

此外,它可以打印一個(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.jsonconfig 字段中設(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)境變量,你可以指定 binVendor Binaries)目錄到 vendor/bin 以外的其它目錄。

http_proxy or HTTP_PROXY

如果你是通過 HTTP 代理來使用 Composer,你可以使用 http_proxyHTTP_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)境變量為 false0,來防止 composer 從 request_fulluri 讀取配置。

HTTPS_PROXY_REQUEST_FULLURI

如果你使用了 HTTPS 代理,但它不支持 request_fulluri 標(biāo)簽,那么你應(yīng)該設(shè)置這個(gè)環(huán)境變量為 false0 ,來防止 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í)行 installupdate 命令時(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
        }
    ]
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容