你已經學會了如何使用命令行界面做一些事情。本章將向你介紹所有可用的命令。
為了從命令行獲得幫助信息,請運行?`composer`?或者?`composer list`?命令,然后結合?`--help`?命令來獲得更多的幫助信息。
## 全局參數
下列參數可與每一個命令結合使用:
* **--verbose (-v):**?增加反饋信息的詳細度。
* -v 表示正常輸出。
* -vv 表示更詳細的輸出。
* -vvv 則是為了 debug。
* **--help (-h):**?顯示幫助信息。
* **--quiet (-q):**?禁止輸出任何信息。
* **--no-interaction (-n):**?不要詢問任何交互問題。
* **--working-dir (-d):**?如果指定的話,使用給定的目錄作為工作目錄。
* **--profile:**?顯示時間和內存使用信息。
* **--ansi:**?強制 ANSI 輸出。
* **--no-ansi:**?關閉 ANSI 輸出。
* **--version (-V):**?顯示當前應用程序的版本信息。
## 進程退出代碼
* **0:**?正常
* **1:**?通用/未知錯誤
* **2:**?依賴關系處理錯誤
## 初始化?`init`
在?[“庫”](http://docs.phpcomposer.com/02-libraries.html)?那一章我們看到了如何手動創建?`composer.json`?文件。實際上還有一個?`init`?命令可以更容易的做到這一點。
當您運行該命令,它會以交互方式要求您填寫一些信息,同時聰明的使用一些默認值。
~~~
php composer.phar init
~~~
### 初始化-參數
* **--name:**?包的名稱。
* **--description:**?包的描述。
* **--author:**?包的作者。
* **--homepage:**?包的主頁。
* **--require:**?需要依賴的其它包,必須要有一個版本約束。并且應該遵循?`foo/bar:1.0.0`?這樣的格式。
* **--require-dev:**?開發版的依賴包,內容格式與?**--require**?相同。
* **--stability (-s):**?`minimum-stability`?字段的值。
## 安裝?`install`
`install`?命令從當前目錄讀取?`composer.json`?文件,處理了依賴關系,并把其安裝到?`vendor`?目錄下。
~~~
php composer.phar install
~~~
如果當前目錄下存在?`composer.lock`?文件,它會從此文件讀取依賴版本,而不是根據?`composer.json`?文件去獲取依賴。這確保了該庫的每個使用者都能得到相同的依賴版本。
如果沒有?`composer.lock`?文件,composer 將在處理完依賴關系后創建它。
### 安裝-參數
* **--prefer-source:**?下載包的方式有兩種:?`source`?和?`dist`。對于穩定版本 composer 將默認使用?`dist`?方式。而?`source`?表示版本控制源 。如果?`--prefer-source`?是被啟用的,composer 將從?`source`?安裝(如果有的話)。如果想要使用一個 bugfix 到你的項目,這是非常有用的。并且可以直接從本地的版本庫直接獲取依賴關系。
* **--prefer-dist:**?與?`--prefer-source`?相反,composer 將盡可能的從?`dist`?獲取,這將大幅度的加快在 build servers 上的安裝。這也是一個回避 git 問題的途徑,如果你不清楚如何正確的設置。
* **--dry-run:**?如果你只是想演示而并非實際安裝一個包,你可以運行?`--dry-run`?命令,它將模擬安裝并顯示將會發生什么。
* **--dev:**?安裝?`require-dev`?字段中列出的包(這是一個默認值)。
* **--no-dev:**?跳過?`require-dev`?字段中列出的包。
* **--no-scripts:**?跳過?`composer.json`?文件中定義的腳本。
* **--no-plugins:**?關閉 plugins。
* **--no-progress:**?移除進度信息,這可以避免一些不處理換行的終端或腳本出現混亂的顯示。
* **--optimize-autoloader (-o):**?轉換 PSR-0/4 autoloading 到 classmap 可以獲得更快的加載支持。特別是在生產環境下建議這么做,但由于運行需要一些時間,因此并沒有作為默認值。
## 更新?`update`
為了獲取依賴的最新版本,并且升級?`composer.lock`?文件,你應該使用?`update`?命令。
~~~
php composer.phar update
~~~
這將解決項目的所有依賴,并將確切的版本號寫入?`composer.lock`。
如果你只是想更新幾個包,你可以像這樣分別列出它們:
~~~
php composer.phar update vendor/package vendor/package2
~~~
你還可以使用通配符進行批量更新:
~~~
php composer.phar update vendor/*
~~~
### 更新-參數
* **--prefer-source:**?當有可用的包時,從?`source`?安裝。
* **--prefer-dist:**?當有可用的包時,從?`dist`?安裝。
* **--dry-run:**?模擬命令,并沒有做實際的操作。
* **--dev:**?安裝?`require-dev`?字段中列出的包(這是一個默認值)。
* **--no-dev:**?跳過?`require-dev`?字段中列出的包。
* **--no-scripts:**?跳過?`composer.json`?文件中定義的腳本。
* **--no-plugins:**?關閉 plugins。
* **--no-progress:**?移除進度信息,這可以避免一些不處理換行的終端或腳本出現混亂的顯示。
* **--optimize-autoloader (-o):**?轉換 PSR-0/4 autoloading 到 classmap 可以獲得更快的加載支持。特別是在生產環境下建議這么做,但由于運行需要一些時間,因此并沒有作為默認值。
* **--lock:**?僅更新 lock 文件的 hash,取消有關 lock 文件過時的警告。
* **--with-dependencies**?同時更新白名單內包的依賴關系,這將進行遞歸更新。
## 申明依賴?`require`
`require`?命令增加新的依賴包到當前目錄的?`composer.json`?文件中。
~~~
php composer.phar require
~~~
在添加或改變依賴時, 修改后的依賴關系將被安裝或者更新。
如果你不希望通過交互來指定依賴包,你可以在這條令中直接指明依賴包。
~~~
php composer.phar require vendor/package:2.* vendor/package2:dev-master
~~~
### 申明依賴-參數
* **--prefer-source:**?當有可用的包時,從?`source`?安裝。
* **--prefer-dist:**?當有可用的包時,從?`dist`?安裝。
* **--dev:**?安裝?`require-dev`?字段中列出的包。
* **--no-update:**?禁用依賴關系的自動更新。
* **--no-progress:**?移除進度信息,這可以避免一些不處理換行的終端或腳本出現混亂的顯示。
* **--update-with-dependencies**?一并更新新裝包的依賴。
## 全局執行?`global`
`global`?命令允許你在?[COMPOSER_HOME](http://docs.phpcomposer.com/03-cli.html#COMPOSER_HOME)?目錄下執行其它命令,像?`install`、`require`?或?`update`。
并且如果你將?`$COMPOSER_HOME/vendor/bin`?加入到了?`$PATH`?環境變量中,你就可以用它在命令行中安裝全局應用,下面是一個例子:
~~~
php composer.phar global require fabpot/php-cs-fixer:dev-master
~~~
現在?`php-cs-fixer`?就可以在全局范圍使用了(假設你已經設置了你的 PATH)。如果稍后你想更新它,你只需要運行?`global update`:
~~~
php composer.phar global update
~~~
## 搜索?`search`
`search`?命令允許你為當前項目搜索依賴包,通常它只搜索 packagist.org 上的包,你可以簡單的輸入你的搜索條件。
~~~
php composer.phar search monolog
~~~
您也可以通過傳遞多個參數來進行多條件搜索。
### 搜索-參數
* **--only-name (-N):**?僅針對指定的名稱搜索(完全匹配)。
## 展示?`show`
列出所有可用的軟件包,你可以使用?`show`?命令。
~~~
php composer.phar show
~~~
如果你想看到一個包的詳細信息,你可以輸入一個包名稱。
~~~
php composer.phar 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
~~~
你甚至可以輸入一個軟件包的版本號,來顯示該版本的詳細信息。
~~~
php composer.phar show monolog/monolog 1.0.2
~~~
### 展示-參數
* **--installed (-i):**?列出已安裝的依賴包。
* **--platform (-p):**?僅列出平臺軟件包(PHP 與它的擴展)。
* **--self (-s):**?僅列出當前項目信息。
## 依賴性檢測?`depends`
`depends`?命令可以查出已安裝在你項目中的某個包,是否正在被其它的包所依賴,并列出他們。
~~~
php composer.phar depends --link-type=require monolog/monolog
nrk/monolog-fluent
poc/poc
propel/propel
symfony/monolog-bridge
symfony/symfony
~~~
### 依賴性檢測-參數
* **--link-type:**?檢測的類型,默認為?`require`?也可以是?`require-dev`。
## 有效性檢測?`validate`
在提交?`composer.json`?文件,和創建 tag 前,你應該始終運行?`validate`?命令。它將檢測你的?`composer.json`?文件是否是有效的
~~~
php composer.phar validate
~~~
### 有效性檢測參數
* **--no-check-all:**?Composer 是否進行完整的校驗。
## 依賴包狀態檢測?`status`
如果你經常修改依賴包里的代碼,并且它們是從 source(自定義源)進行安裝的,那么?`status`?命令允許你進行檢查,如果你有任何本地的更改它將會給予提示。
~~~
php composer.phar status
~~~
你可以使用?`--verbose`?系列參數(-v|vv|vvv)來獲取更詳細的詳細:
~~~
php composer.phar status -v
You have changes in the following dependencies:
vendor/seld/jsonlint:
M README.mdown
~~~
## 自我更新?`self-update`
將 Composer 自身升級到最新版本,只需要運行?`self-update`?命令。它將替換你的?`composer.phar`?文件到最新版本。
~~~
php composer.phar self-update
~~~
如果你想要升級到一個特定的版本,可以這樣簡單的指定它:
~~~
php composer.phar self-update 1.0.0-alpha7
~~~
如果你已經為整個系統安裝 Composer(參見?[全局安裝](http://docs.phpcomposer.com/00-intro.html#%E5%85%A8%E5%B1%80%E5%AE%89%E8%A3%85)),你可能需要在?`root`?權限下運行它:
~~~
sudo composer self-update
~~~
### 自我更新-參數
* **--rollback (-r):**?回滾到你已經安裝的最后一個版本。
* **--clean-backups:**?在更新過程中刪除舊的備份,這使得更新過后的當前版本是唯一可用的備份。
## 更改配置?`config`
`config`?命令允許你編輯 Composer 的一些基本設置,無論是本地的?`composer.json`?或者全局的?`config.json`?文件。
~~~
php composer.phar config --list
~~~
### 更改配置-使用方法
`config [options] [setting-key] [setting-value1] ... [setting-valueN]`
`setting-key`?是一個配置選項的名稱,`setting-value1`?是一個配置的值。可以使用數組作為配置的值(像?`github-protocols`),多個?`setting-value`?是允許的。
有效的配置選項,請查看“架構”章節的?[config](http://docs.phpcomposer.com/04-schema.html#config)?。
### 更改配置-參數
* **--global (-g):**?操作位于?`$COMPOSER_HOME/config.json`?的全局配置文件。如果不指定該參數,此命令將影響當前項目的 composer.json 文件,或?`--file`?參數所指向的文件。
* **--editor (-e):**?使用文本編輯器打開 composer.json 文件。默認情況下始終是打開當前項目的文件。當存在?`--global`?參數時,將會打開全局 composer.json 文件。
* **--unset:**?移除由?`setting-key`?指定名稱的配置選項。
* **--list (-l):**?顯示當前配置選項的列表。當存在?`--global`?參數時,將會顯示全局配置選項的列表。
* **--file="..." (-f):**?在一個指定的文件上操作,而不是 composer.json。注意:不能與?`--global`?參數一起使用。
### 修改包來源
除了修改配置選項,?`config`?命令還支持通過以下方法修改來源信息:
~~~
php composer.phar config repositories.foo vcs http://github.com/foo/bar
~~~
## 創建項目?`create-project`
你可以使用 Composer 從現有的包中創建一個新的項目。這相當于執行了一個?`git clone`?或?`svn checkout`命令后將這個包的依賴安裝到它自己的 vendor 目錄。
此命令有幾個常見的用途:
1. 你可以快速的部署你的應用。
2. 你可以檢出任何資源包,并開發它的補丁。
3. 多人開發項目,可以用它來加快應用的初始化。
要創建基于 Composer 的新項目,你可以使用 "create-project" 命令。傳遞一個包名,它會為你創建項目的目錄。你也可以在第三個參數中指定版本號,否則將獲取最新的版本。
如果該目錄目前不存在,則會在安裝過程中自動創建。
~~~
php composer.phar create-project doctrine/orm path 2.2.*
~~~
此外,你也可以無需使用這個命令,而是通過現有的?`composer.json`?文件來啟動這個項目。
默認情況下,這個命令會在 packagist.org 上查找你指定的包。
### 創建項目-參數
* **--repository-url:**?提供一個自定義的儲存庫來搜索包,這將被用來代替 packagist.org。可以是一個指向?`composer`?資源庫的 HTTP URL,或者是指向某個?`packages.json`?文件的本地路徑。
* **--stability (-s):**?資源包的最低穩定版本,默認為?`stable`。
* **--prefer-source:**?當有可用的包時,從?`source`?安裝。
* **--prefer-dist:**?當有可用的包時,從?`dist`?安裝。
* **--dev:**?安裝?`require-dev`?字段中列出的包。
* **--no-install:**?禁止安裝包的依賴。
* **--no-plugins:**?禁用 plugins。
* **--no-scripts:**?禁止在根資源包中定義的腳本執行。
* **--no-progress:**?移除進度信息,這可以避免一些不處理換行的終端或腳本出現混亂的顯示。
* **--keep-vcs:**?創建時跳過缺失的 VCS 。如果你在非交互模式下運行創建命令,這將是非常有用的。
## 打印自動加載索引?`dump-autoload`
某些情況下你需要更新 autoloader,例如在你的包中加入了一個新的類。你可以使用?`dump-autoload`?來完成,而不必執行?`install`?或?`update`?命令。
此外,它可以打印一個優化過的,符合 PSR-0/4 規范的類的索引,這也是出于對性能的可考慮。在大型的應用中會有許多類文件,而 autoloader 會占用每個請求的很大一部分時間,使用 classmaps 或許在開發時不太方便,但它在保證性能的前提下,仍然可以獲得 PSR-0/4 規范帶來的便利。
### 打印自動加載索引-參數
* **--optimize (-o):**?轉換 PSR-0/4 autoloading 到 classmap 獲得更快的載入速度。這特別適用于生產環境,但可能需要一些時間來運行,因此它目前不是默認設置。
* **--no-dev:**?禁用 autoload-dev 規則。
## 查看許可協議?`licenses`
列出已安裝的每個包的名稱、版本、許可協議。可以使用?`--format=json`?參數來獲取 JSON 格式的輸出。
## 執行腳本?`run-script`
你可以運行此命令來手動執行?[腳本](http://docs.phpcomposer.com/articles/scripts.html),只需要指定腳本的名稱,可選的?`--no-dev`?參數允許你禁用開發者模式。
## 診斷?`diagnose`
如果你覺得發現了一個 bug 或是程序行為變得怪異,你可能需要運行?`diagnose`?命令,來幫助你檢測一些常見的問題。
~~~
php composer.phar diagnose
~~~
## 歸檔?`archive`
此命令用來對指定包的指定版本進行 zip/tar 歸檔。它也可以用來歸檔你的整個項目,不包括 excluded/ignored(排除/忽略)的文件。
~~~
php composer.phar archive vendor/package 2.0.21 --format=zip
~~~
### 歸檔-參數
* **--format (-f):**?指定歸檔格式:tar 或 zip(默認為 tar)。
* **--dir:**?指定歸檔存放的目錄(默認為當前目錄)。
## 獲取幫助信息?`help`
使用?`help`?可以獲取指定命令的幫助信息。
~~~
php composer.phar help install
~~~
## 環境變量
你可以設置一些環境變量來覆蓋默認的配置。建議盡可能的在?`composer.json`?的?`config`?字段中設置這些值,而不是通過命令行設置環境變量。值得注意的是環境變量中的值,將始終優先于?`composer.json`?中所指定的值。
### COMPOSER
環境變量?`COMPOSER`?可以為?`composer.json`?文件指定其它的文件名。
例如:
~~~
COMPOSER=composer-other.json php composer.phar install
~~~
### COMPOSER_ROOT_VERSION
通過設置這個環境變量,你可以指定 root 包的版本,如果程序不能從 VCS 上猜測出版本號,并且未在?`composer.json`?文件中申明。
### COMPOSER_VENDOR_DIR
通過設置這個環境變量,你可以指定 composer 將依賴安裝在?`vendor`?以外的其它目錄中。
### COMPOSER_BIN_DIR
通過設置這個環境變量,你可以指定?`bin`([Vendor Binaries](http://docs.phpcomposer.com/articles/vendor-binaries.html))目錄到?`vendor/bin`?以外的其它目錄。
### http_proxy or HTTP_PROXY
如果你是通過 HTTP 代理來使用 Composer,你可以使用?`http_proxy`?或?`HTTP_PROXY`?環境變量。只要簡單的將它設置為代理服務器的 URL。許多操作系統已經為你的服務設置了此變量。
建議使用?`http_proxy`(小寫)或者兩者都進行定義。因為某些工具,像 git 或 curl 將使用?`http_proxy`?小寫的版本。另外,你還可以使用?`git config --global http.proxy `?來單獨設置 git 的代理。
### no_proxy
如果你是使用代理服務器,并且想要對某些域名禁用代理,就可以使用?`no_proxy`?環境變量。只需要輸入一個逗號相隔的域名?_排除_?列表。
此環境變量接受域名、IP 以及 CIDR地址塊。你可以將它限制到一個端口(例如:`:80`)。你還可以把它設置為?`*`?來忽略所有的 HTTP 代理請求。
### HTTP_PROXY_REQUEST_FULLURI
如果你使用了 HTTP 代理,但它不支持?`request_fulluri`?標簽,那么你應該設置這個環境變量為?`false`?或?`0`?,來防止 composer 從?`request_fulluri`?讀取配置。
### HTTPS_PROXY_REQUEST_FULLURI
如果你使用了 HTTPS 代理,但它不支持?`request_fulluri`?標簽,那么你應該設置這個環境變量為?`false`?或?`0`?,來防止 composer 從?`request_fulluri`?讀取配置。
### COMPOSER_HOME
`COMPOSER_HOME`?環境變量允許你改變 Composer 的主目錄。這是一個隱藏的、所有項目共享的全局目錄(對本機的所有用戶都可用)。
它在各個系統上的默認值分別為:
* *nix?`/home//.composer`。
* OSX?`/Users//.composer`。
* Windows?`C:\Users\\AppData\Roaming\Composer`。
#### COMPOSER_HOME/config.json
你可以在?`COMPOSER_HOME`?目錄中放置一個?`config.json`?文件。在你執行?`install`?和?`update`?命令時,Composer 會將它與你項目中的?`composer.json`?文件進行合并。
該文件允許你為用戶的項目設置?[配置信息](http://docs.phpcomposer.com/04-schema.html#config)?和?[資源庫](http://docs.phpcomposer.com/05-repositories.html)。
若?_全局_?和?_項目_?存在相同配置項,那么項目中的?`composer.json`?文件擁有更高的優先級。
### COMPOSER_CACHE_DIR
`COMPOSER_CACHE_DIR`?環境變量允許你設置 Composer 的緩存目錄,這也可以通過?[`cache-dir`](http://docs.phpcomposer.com/04-schema.html#config)?進行配置。
它在各個系統上的默認值分別為:
* *nix and OSX?`$COMPOSER_HOME/cache`。
* Windows?`C:\Users\\AppData\Local\Composer`?或?`%LOCALAPPDATA%/Composer`。
### COMPOSER_PROCESS_TIMEOUT
這個環境變量控制著 Composer 執行命令的等待時間(例如:git 命令)。默認值為300秒(5分鐘)。
### COMPOSER_DISCARD_CHANGES
這個環境變量控制著 discard-changes?[config option](http://docs.phpcomposer.com/04-schema.html#config)。
### COMPOSER_NO_INTERACTION
如果設置為1,這個環境變量將使 Composer 在執行每一個命令時都放棄交互,相當于對所有命令都使用了?`--no-interaction`。可以在搭建?_虛擬機/持續集成服務器_?時這樣設置。