命令行接口 / 命令#

你已经学会了如何使用命令行工具做一些事情。本章将向你介绍所有可用的命令。

为了从命令行获得帮助信息,请运行 composer 或者 composer list 获取所有的命令列表, 然后通过 --help 来获得更多的帮助信息。

Composer 使用了 symfony/console ,你可以通过缩略名来调用相应的命令,前提是这个缩略名不会混淆。

composer dump

相当于调用 composer dump-autoload.

全局选项#

以下选项可以在每条命令中使用:

返回结果码#

init 命令#

在 创建扩展包 我们知道了如何手动创建  composer.json , init 命令可以简便创建扩展包操作。

当你运行该命令时,它会询问你填写相应的字段,同时会给出一些默认值。

php composer.phar init

选项#

安装#

install 命令会读取 当前目录的 composer.json 文件,解决依赖关系,并把它们安装到 vendor 文件夹中。

php composer.phar install

如果当前文件夹下存在 composer.lock 文件,Composer 会使用其中指定的版本,而不是解决在依赖关系。这确保了组内开发人员使用的扩展包一致。

如果没有 composer.lock 文件, Composer 会在解决依赖关系之后自动创建。

选项#

update / u#

为了获取最新版本的依赖以及升级 composer.lock 文件,你应该使用 update 命令。这个命令也被链接成 upgrade,因为它和 upgrade 做的事相同,你可以类比 apt-get 等包管理工具。

php composer.phar update

这会获取项目的所有依赖并且将确切的版本号写入 composer.lock

如果你只是想升级部分依赖而不是全部,你可以像这样把他们列出来:

php composer.phar update vendor/package vendor/package2

你也可以使用通配符一次升级很多依赖:

php composer.phar update vendor/*

选项#

require#

require 命令将新的依赖添加到当前目录的 composer.json 文件中。如果文件不存在则会自动创建。

php composer.phar require

添加或升级其中的依赖之后,修改的依赖会被安装或升级。

如果你不想交互式的选择依赖,你可以将他们传递到命令参数中。

php composer.phar require vendor/package:2.* vendor/package2:dev-master

如果你没有指定包名,Composer 会提示你寻找并且给出结果列表以供使用。

选项#

remove#

 remove 命令用于移除 composer.json 中的扩展包。

php composer.phar remove vendor/package vendor/package2

移除后,将不再安装。

选项#

check-platform-reqs#

check-platform-reqs 命令检查你的 PHP 和扩展版本是否满足已安装依赖的平台需求。这可以用来验证生产服务器是否有供项目运行需要的所有扩展。

global#

global 命令允许你在 COMPOSER_HOME 目录运行像 installremoverequire or update 这些命令。

这仅仅是用来管理存储在中心目录中你想从任意位置运行的 CLI 工具和 Composer 插件。

这可以用来安装全局 CLI 工具。例如:

php composer.phar global require friendsofphp/php-cs-fixer

现在 php-cs-fixer 就可以在全局使用了。确保你的全局 vendor 可执行文件 目录在你的 $PATH 环境变量中,你可以通过如下命令来查看其位置:

php composer.phar global config bin-dir --absolute

如果你想升级全局可执行文件,你可以执行全局升级:

php composer.phar global update

搜索#

搜索命令允许你搜索当前项目下的包仓库。通常这会是一个 packagist 。你只需要简单的输入将你想要搜索的内容。

php composer.phar search monolog

你也可以通过输入多个参数来搜索你想要的内容。

选项#

show#

要列出所有可用的包,可以使用 show 命令。

php composer.phar show

要过滤列表你可以使用通配符:

php composer.phar show monolog/*

monolog/monolog 1.19.0 Sends your logs to files, sockets, inboxes, databases and various web services

如果你查看包的详细信息,你可以传递该包名:

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] https://github.com/Seldaek/monolog.git 3d4e60d0cbc4b888fe5ad223d77964428b1978da
dist     : [zip] https://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

选项#

outdated#

 outdated 命令会列出已安装的扩展包是否可更新,包括当前版本和最新版本。这有一个别名 composer show -lo

展示的颜色含义如下:The color coding is as such:

Options

browse / home#

browse (和 home 链接)会在浏览器中打开包的仓库地址或其主页。

选项#

suggests#

列出已安装的包的所有建议依赖。你可以传递一个或多个 vendor/package 格式的参数来只显示那些包的建议依赖。

使用 --by-package 或 --by-suggestion 参数来通过提供建议的包或建议的包来分组格式化输出。

使用 --verbose (-v) 参数来显示上述两种格式化输,即 --by-package --by-suggestion 同时启用的结果。

选项#

depends (why)#

depends 命令告诉你为什么其他包依赖某个包。而用 require-dev 安装的包关系则只会考虑根依赖。

php composer.phar depends doctrine/lexer
 doctrine/annotations v1.2.7 requires doctrine/lexer (1.*)
 doctrine/common      v2.6.1 requires doctrine/lexer (1.*)

你可以在包后面指定版本来限制查找。

添加 --tree 或 -t 参数以递归地显示树状依赖关系图。例如:

php composer.phar depends psr/log -t
psr/log 1.0.0 Common interface for logging libraries
|- aboutyou/app-sdk 2.6.11 (requires psr/log 1.0.*)
|  `- __root__ (requires aboutyou/app-sdk ^2.6)
|- monolog/monolog 1.17.2 (requires psr/log ~1.0)
|  `- laravel/framework v5.2.16 (requires monolog/monolog ~1.11)
|     `- __root__ (requires laravel/framework ^5.2)
`- symfony/symfony v3.0.2 (requires psr/log ~1.0)
   `- __root__ (requires symfony/symfony ^3.0)

选项#

prohibits (why-not)#

prohibits 命令告诉你那些包被给定的包屏蔽。通过指定包版本可以验证在你的项目中是否可以执行升级操作,如果不能的话会告诉你为什么。看下面的例子:

php composer.phar prohibits symfony/symfony 3.1
 laravel/framework v5.2.16 requires symfony/var-dumper (2.8.*|3.0.*)

你也可以指定平台依赖,比如检查你的服务器是否可以升级到 PHP 8.0:

php composer.phar prohibits php:8
 doctrine/cache        v1.6.0 requires php (~5.5|~7.0)
 doctrine/common       v2.6.1 requires php (~5.5|~7.0)
 doctrine/instantiator 1.0.5  requires php (>=5.3,<8.0-DEV)

通过 depends 你可以递归地查找,会列出哪些依赖的包会导致冲突。

选项#

验证#

你应该经常在你提交你的 composer.json 文件和发布新的 tag 之前执行  validate 命令。它将会检查你的 composer.json 是否是合法的。

php composer.phar validate

选项#

状态#

如果你经常需要修改依赖项的代码并且他们是从源码中安装的, status 命令可以检查你本地代码中的修改内容。

php composer.phar status

使用 --verbose 选项,你可以获取更多关于改动的内容信息。

php composer.phar status -v

你在以下依赖项中有修改:
vendor/seld/jsonlint:
    M READMEown

self-update (selfupdate)#

升级 Composer 到最新版本,执行 self-update 命令。它会将你的 composer.phar 替换到最新版本。

php composer.phar self-update

如果你想要升级到指定版本:

php composer.phar self-update 1.0.0-alpha7

如果你在系统全局安装了 COmposer(详见 global installation),你可能需要以 root 执行命令:

sudo -H composer self-update

选项#

config#

config 命令允许你编辑存储在本地 composer.json 或全局的 config.json 文件中的 Composer 设置和仓库。

它允许你编辑本地 composer.json 文件中的绝大部分设置。

php composer.phar config --list

使用#

config [options] [setting-key] [setting-value1] ... [setting-valueN]

setting-key 是一个设置项名称并且 setting-value1 是一个设置项值。对能接收一组值的设置项来说 (比如 github-protocols),
不止一个设置值可以被传递。

你可以编辑下列属性的值:

descriptionhomepagekeywordslicenseminimum-stabilitynameprefer-stabletype 和 version.

详见 Config 以获取所有的设置项。

选项#

修改仓库#

除了修改设置项,config 命令也支持对仓库进行更改,如下的方式:

php composer.phar config repositories.foo vcs https://github.com/foo/bar

如果你的仓库需要更多的选项,你可以按照 JSON 的形式传递参数:

php composer.phar config repositories.foo '{"type": "vcs", "url": "http://svn.example.org/my-project/", "trunk-path": "master"}'

修改 Extra 的值#

除了修改设置项,config 命令也支持对 extra 进行更改,如下方式:

php composer.phar config extra.foo.bar value

. 表示数组参数,最多允许三层。以上会设置 extra 为 "extra": { "foo": { "bar": "value" } }.

create-project#

你可以使用 Composer 从已存在的包创建新的项目。这跟从 Git/Svn 克隆项目并执行 composer install 安装依赖是等效的。

有以下几个应用场景:

  1. 你可以发布应用的包。
  2. 你可以检索任何包并开始在补丁上进行开发。
  3. 有很多不同开发者的项目可以用这个特性来进行应用的初始化以开发。

使用 Composer 来创建一个新的项目你可以使用 create-project 命令。给它传递一个包名,和要创建项目所在的目录名。你也可以将版本号作为第三个参数传入,否则会使用最新的版本。

如果目录不存在,它会在安装的过程中自动创建。

php composer.phar create-project doctrine/orm path 2.2.*

也可以在你一个有 composer.json 文件的目录里不加参数来执行这个命令来启动一个项目。

默认此命令会从 packagist.org 检索包。

选项#

dump-autoload (dumpautoload)#

如果你要为 classmap 中新的类名生成自动加载,可以使用 dump-autoload 命令而不必执行安装或升级。

除此之外,它可以转换 PSR-0/4 包到 classmap 中以实现更好的性能。在有很多类的大型项目中,自动加载在每次请求中占了相当多的时间。 在开发中为一切使用 classmap 会有些不太方便,但启用此项你仍可以为了方便而去使用 PSR-0/4 以及同时为了性能去使用 classmap。

选项#

clear-cache (clearcache)#

从 Composer 的缓存目录中删除一切。

licenses#

列出已安装每个包许可证的名称和版本。使用 --format=json 参数来输出机器可读的内容。

选项#

run-script#

选项#

要手动运行 脚本 你可以使用此命令,同时传递脚本名称以及必要参数。

exec#

执行依赖中的可执行文件或脚本。你可以执行任何命令并且它会确保命令执行前 Composer 的执行文件路径在 PATH 环境变量中。

选项#

diagnose#

如果你发现了一个 bug 或是一些不对劲的地方,你可能想要执行 diagnose 命令来自动检查一些常见的问题。

php composer.phar diagnose

archive#

这个命令会为给定版本的包生成一个 zip/tar 的压缩包。它也可以为整个项目生成一个压缩包并排除已忽略的文件。

php composer.phar archive vendor/package 2.0.21 --format=zip

选项#

help#

想了解某个命令的更多信息,可以使用 help 命令。

php composer.phar help install

命令行补全#

命令行补全可以按照此 说明

环境变量#

你可以设置一些环境变量来覆盖某些设置。但尽可能在 composer.jsonconfig 项中设置。值得注意的是环境变量的优先级高于 composer.json 中的定义。

COMPOSER#

设置 COMPOSER 变量可以指定别的 composer.json 文件名。

例如:

COMPOSER=composer-other.json php composer.phar install

在这个例子中,生成的 lock 文件会使用此名称 composer-other.lock

COMPOSER_ROOT_VERSION#

在根依赖版本不能从 VCS 中猜测或没有在 composer.json 文件中列出的时候,通过设置此变量你可以指定其版本。

COMPOSER_VENDOR_DIR#

通过设置此变量你可以让 Composer 将依赖文件安装在其他目录而非 vendor

COMPOSER_BIN_DIR#

通过设置此变量你可以改变 bin (Vendor Binaries) 目录的位置而非 vendor/bin

http_proxy 或 HTTP_PROXY#

如果你在 HTTP 代理下使用 Composer,你可以使用标准的 http_proxy 或 HTTP_PROXY 环境变量。简单地把它设置成代理的地址。其实一些操作系统已经为你设置好了。

使用 http_proxy (小写字母)或大小写都是用甚至会更好,因为一些工具像 git、curl 等等只会使用小写的 http_proxy 。除此之外你也可以这样为 Git 设置代理 git config --global http.proxy <proxy url>

如果你在非 CLI 环境中使用 Composer(比如 CMS 集成环境或类似) 并且也需要设置代理,那请用 CGI_HTTP_PROXY 变量来替代。详见 httpoxy.org

no_proxy 或 NO_PROXY#

如果你正在使用 HTTP 代理并且想要为一些域名禁用代理,你可以设置 no_proxy 或 NO_PROXY 环境变量。简单地把它设置为逗号分隔的你 不想要 走代理的域名。

次环境变量接收值为域名、IP 地址以及在 CIDR 中被屏蔽的 IP。你可以指定过滤特定端口(例如 :80)。你也可以将它设置为 * 通配符来为所有的 HTTP 请求禁用代理。

HTTP_PROXY_REQUEST_FULLURI#

如果你正在使用代理但它不支持 request_fulluri 参数,那你应该将此变量设置为 false 或 0 以避免 Composer 设置 request_fulluri 参数。

HTTPS_PROXY_REQUEST_FULLURI#

如果你正在使用代理但它不支持为 HTTPS 请求设置 request_fulluri 参数,那你应该将此变量设置为 false 或 0 以避免 Composer 设置 request_fulluri 参数。

COMPOSER_HOME#

COMPOSER_HOME 变量允许你更改 Composer 主目录。这是个隐藏的并且在计算机里每个用户的 Home 目录下的目录,所有项目都可以共享此目录。

默认它会指向 Windows 的 C:\Users\<user>\AppData\Roaming\Composer 以及 OSX 的 /Users/<user>/.composer 目录。在遵守 XDG Base Directory Specifications 的 *nix 系统中,它指向 $XDG_CONFIG_HOME/composer。 在其他的 *nix 系统 中,它指向 /home/<user>/.composer

COMPOSER_HOME/config.json#

你可以将 config.json 文件放置在 COMPOSER_HOME 变量指向的位置。这样在运行 install 和 update 命令的时候 Composer 会将这个文件中的设置项与当前目录的 composer.json 文件中的合并。

此文件允许你为用户项目设置 repositories 和 configuration 中的设置内容。

一旦 全局 设置项与 本地 相同,本地 项目中 composer.json 的设置项总会是优先被使用的。

COMPOSER_CACHE_DIR#

COMPOSER_CACHE_DIR 允许你设置 Composer 的缓存路径,此设置也可以用 cache-dir 选项来设置。

默认他会指向 *nix 和 OSX 的 $COMPOSER_HOME/cache ,以及 WIndows 的 C:\Users\<user>\AppData\Local\Composer (或 %LOCALAPPDATA%/Composer)。

COMPOSER_PROCESS_TIMEOUT#

此变量控制 Composer 执行命令(比如 Git 命令)直到完成的超时时间。默认是300秒(5分钟)。

COMPOSER_CAFILE#

你可以设置此变量来指定 SSL/TLS 验证的=使用证书的路径。

COMPOSER_AUTH#

COMPOSER_AUTH 允许你以变量的形式设置验证。变量值应该是 JSON 格式,包含 http-basic,github-oauth,bitbucket-oauth 等等。 其内容遵守 spec from the config

COMPOSER_DISCARD_CHANGES#

此变量控制 discard-changes 设置项。

COMPOSER_NO_INTERACTION#

如果它被设为1,其效果就像在执行每个命令时都加了 --no-interaction 参数。可以在 构建系统以及 CI 系统中设置。

COMPOSER_ALLOW_SUPERUSER#

如果它被设为1,则以后使用 root 身份运行命令时不会收到警告。它也会禁止自动清理 sudo 会话,所以你应该只在完全使用 root 身份执行命令(例如在 Docker 容器中)时设置此项。

COMPOSER_MEMORY_LIMIT#

设置此项会像 PHP 的 memory_limit 参数一样起作用。

COMPOSER_MIRROR_PATH_REPOS#

如果设为1,会把默认仓库路径的策略从 symlink 改为 mirror。但即使它被设置了,也会被仓库自己的设置项覆盖。

COMPOSER_HTACCESS_PROTECT#

默认是 1。如果设为 0,Composer 不会在主目录、缓存目录以及其他数据目录创建 .htaccess 文件。

发现了一个错字?文档中有问题吗? 只需要 fork并编辑 它!