2.4. Composer 命令的使用

命令行工具

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

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

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

composer dump

相当于调用 composer dump-autoload.

全局选项

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

  • --verbose (-v): 增加提示信息。
  • --help (-h): 查看帮助信息。
  • --quiet (-q): 不输出任何信息。
  • --no-interaction (-n): 不询问任何相关的问题。
  • --no-plugins: 取消插件。
  • --working-dir (-d): 指定工作目录,默认为当前目录。
  • --profile: 查看耗时和内存使用情况。
  • --ansi: 强制输出为ANSI编码格式。
  • --no-ansi: 取消ANSI编码格式输出。
  • --version (-V): 查看版本号。

返回结果码

  • 0: OK 正确码
  • 1: 通常/未知错误码
  • 2: 需要解决的错误码

init 命令

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

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

php composer.phar init

选项

  • --name: 扩展包名。
  • --description: 扩展包简介。
  • --author: 扩展包作者
  • --type: 扩展包类型。
  • --homepage: 扩展包主页。
  • --require: 扩展包版本约束,编写格式 foo/bar:1.0.0
  • --require-dev: 开发模式下约束,写法同 --require
  • --stability (-s): 最低的稳定版本 minimum-stability 的值。
  • --license (-l): 扩展包的授权协议。
  • --repository: 提供一个(或多个)自定义仓库。它们将存储在 composer.json 中,并在提示输入需求列表时用于自动完成。每个仓库都可以是指向 composer 仓库的 HTTP URL ,也可以是类似于仓库 的 JSON 字符串。

安装

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

php composer.phar install

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

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

选项

  • --prefer-source: 有两种方式下载扩展包: 源代码版 和 可执行版 。对于稳定版本,Composer 会默认使用 可执行版源码版 来自版本控制工具的,如果启用了 --prefer-source , Composer 会安装 源码版 。这有一个小提示,如果你想修复 bug ,那么从依赖关系中,直接本地克隆一个仓库。
  • --prefer-dist: 和 --prefer-source 相反,如果 可执行版本 存在,Compser 会直接安装。这会加快服务器上构建速度同时不用更新 vendor 。你没有正确安装, git 克隆该扩展包也是一种方式。
  • --dry-run: 如果想运行时指明不安装某一扩展包,你可以使用 --dry-run 。这会模拟该安装并提示会出现的问题。
  • --dev: 安装 require-dev 中的扩展列表(默认执行)。
  • --no-dev: 跳过 require-dev 中的扩展列表。.自动加载中会跳过 autoload-dev 规则。
  • --no-autoloader: 跳过自动加载。
  • --no-scripts: 跳过 composer.json 中声明的脚本。
  • --no-progress: 移除进度的展示,有的命令或脚本不处理退格字符,引起显示混乱。
  • --no-suggest: 跳过扩展包建议。
  • --optimize-autoloader (-o): 转换 PSR-0/4 autoloading 到 classmap 可以获得更快的加载支持。特别是在生产环境下建议这么做,但由于运行需要一些时间,因此并没有作为默认值。
  • --classmap-authoritative (-a): 仅从 classmap 加载类。会附带启动 --optimize-autoloader
  • --apcu-autoloader: 启用 APCu 来缓存所有类。
  • --ignore-platform-reqs: 忽略 phphhvmlib-* 和 ext-* 要求并强制安装,就算本地环境不完全要求。平台配置选项可见platform 。

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/*

选项

  • --prefer-source: 如果可以的话从 源码 安装依赖。
  • --prefer-dist: 如果可以的话从 发布 安装依赖。
  • --dry-run: 模拟执行命令但事实上不做任何更改。
  • --dev: 安装 require-dev 列出的依赖(这也是默认行为)。
  • --no-dev: 不安装 require-dev 列出的依赖。自动加载生成也会跳过 autoload-dev
  • --lock: 只升级 lock 文件的哈希以消除 lock 文件过期的警告。
  • --no-autoloader: 不生成自动加载。
  • --no-scripts: 跳过执行 composer.json 中定义的脚本。
  • --no-progress: 移除进度条的显示来避免和一些终端或不支持退格字符的脚本冲突。
  • --no-suggest: 跳过输出中建议的依赖。
  • --with-dependencies: 添加白名单中的依赖到白名单,除了那些根依赖。
  • --with-all-dependencies: 添加所有白名单中的依赖到白名单,包括那些根依赖。
  • --optimize-autoloader (-o): 转换 PSR-0/4 自动加载到 classmap 以获取更快的加载速度。很建议在生产环境中这样做,但执行比较耗时,所以默认是关闭的。
  • --classmap-authoritative (-a): 只自动加载 classmap 中的类名。需要开启 --optimize-autoloader
  • --apcu-autoloader: 使用 APCu 来缓存找到和没找到的类名。
  • --ignore-platform-reqs: 忽略 phphhvmlib-* 和 ext-* 依赖并强制安装,即使本地计算机不能完全支持这些特性。详见 platform
  • --prefer-stable: 稳定版本优先。
  • --prefer-lowest: 最低版本优先。测试依赖的最低版本时候很有用,一般和 --prefer-stable 联用。
  • --interactive: 交互式的选择哪些依赖要被升级,带自动补全。
  • --root-reqs: 限制根依赖的升级。

require

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

php composer.phar require

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

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

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

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

选项

  • --dev: 将依赖添加到 require-dev
  • --prefer-source: 尽可能从 源码 安装。
  • --prefer-dist: 尽可能从 发布 安装。
  • --no-progress: 移除进度条的显示来避免和一些终端或不支持退格字符的脚本冲突。
  • --no-suggest: 跳过输出中建议的依赖。
  • --no-update: 禁止依赖自动升级。
  • --no-scripts: 跳过执行在 composer.json 定义的脚本。
  • --update-no-dev: 用 --no-dev 选项执行依赖升级。
  • --update-with-dependencies: 升级最近引入的依赖,排除根依赖。
  • --update-with-all-dependencies: 升级最近引入的依赖,包括根依赖。
  • --ignore-platform-reqs: 忽略 phphhvmlib-*ext-* 依赖并强制安装,即使本地计算机不能完全支持这些特性。详见 platform。 详见 platform
  • --prefer-stable: 稳定版本优先。
  • --prefer-lowest: 最低版本优先。测试依赖的最低版本时候很有用,一般和  --prefer-stable 联用。
  • --sort-packages: 保持 composer.json 中的依赖排列顺序。
  • --optimize-autoloader (-o): 转换 PSR-0/4 自动加载到 classmap 以获取更快的加载速度。很建议在生产环境中这样做,但执行比较耗时,所以默认是关闭的。
  • --classmap-authoritative (-a): 只自动加载 classmap 中的类名。需要开启 --optimize-autoloader
  • --apcu-autoloader: 使用 APCu 来缓存找到和没找到的类名。

remove

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

php composer.phar remove vendor/package vendor/package2

移除后,将不再安装。

选项

  • --dev: 移除 require-dev中的安装包
  • --no-progress: 不展示处理进度,可能有不处理退格字符的命令或者脚本会污染展示。
  • --no-update: 取消自动更新依赖。
  • --no-scripts: 不执行 composer.json 中的脚本。
  • --update-no-dev: 更新,除了开发的扩展包。
  • --update-with-dependencies: 同时更新已移除包的依赖关系。
  • --ignore-platform-reqs: 忽略 php, hhvm, lib-*ext-* 要求并强制安装,就算本地环境不完全要求。平台配置选项可见 platform 。
  • --optimize-autoloader (-o): 转换 PSR-0/4 autoloading 到 classmap 可以获得更快的加载支持。特别是在生产环境下建议这么做,但由于运行需要一些时间,因此并没有作为默认值。
  • --classmap-authoritative (-a): 仅从 classmap 加载类。会附带启动 --optimize-autoloader。
  • --apcu-autoloader: 启用 APCu 来缓存所有类。

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

search

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

php composer.phar search monolog

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

选项

  • --only-name (-N): 只通过名称来搜索。
  • --type (-t): 搜索特定的包类型。

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

选项

  • --all : 列出你所有仓库中可用的包。
  • --installed (-i): 列出所有已安装的包(默认启用,并且此选项已弃用)。
  • --platform (-p): 只列出平台依赖(PHP 和扩展)。
  • --available (-a): 只列出可用的包。
  • --self (-s): 列出根依赖信息。
  • --name-only (-N): 只列出包名。
  • --path (-P): 列出包路径。
  • --tree (-t): 以树的形式列出你的依赖,如果传递了包名,它会列出这个包的依赖树。
  • --latest (-l): 列出所有已安装的包以及它们的最新版本。
  • --outdated (-o): 包含 --latest,但这 只会 列出有新版本可用的包。
  • --minor-only (-m): 和 --latest 联用。只列出有小的语义化升级的包。
  • --direct (-D): 限制列出你的直系依赖。
  • --strict: 如果有包过期,返回非零值。
  • --format (-f): 选择输出的信息格式,文本(默认)或 JSON。

outdated

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

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

  • green (=): 该依赖包已经是最新版本了。
  • yellow (~): 有最新版本可用,但是不兼容。由SemVer(语义化版本规范)的提示给出引起的向后兼容问题,可以更新但是可能会引起兼容性问题。
  • red (!): 有新版本可用,符合SemVer即兼容,推荐更新。

Options

  • --all (-a): 展示所有扩展包,不止过时的扩展包 (命令别称 : composer show -l)。
  • --direct (-D): 仅展示直接依赖项列表。
  • --strict: 如果扩展包过时,返回 exit code 不为零的扩展。
  • --minor-only (-m): 仅展示镜像版本兼容的可更新扩展。
  • --format (-f): 设置输出格式为 text (默认) 或者 json。

browse / home

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

选项

  • --homepage (-H): 打开包的主页而不是仓库地址。
  • --show (-s): 只展示主页或仓库地址。

suggests

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

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

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

选项

  • --by-package: 通过提供建议的包分组格式化输出。
  • --by-suggestion: 通过建议的包分组格式化输出。
  • --no-dev: 排除 require-dev 中包的建议。

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)

选项

  • --recursive (-r): 递归获取一直到根依赖。
  • --tree (-t): 按照树状显示结果,会启用 -r 参数。

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 你可以递归地查找,会列出哪些依赖的包会导致冲突。

选项

  • --recursive (-r): 递归获取一直到根依赖。
  • --tree (-t): 按照树状显示结果,会启用 -r 参数。

验证

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

php composer.phar validate

选项

  • --no-check-all: 不要抛出警告如果你要求你的 composer.json  使用版本约束。
  • --no-check-lock: 不要抛出错误如果  composer.json 存在并且不是最新的。
  • --no-check-publish: 不要抛出错误如果 composer.json 文件不适合作为包发布到 Packagist 上但是在其他方面他是有效的。
  • --with-dependencies: 同时会验证 composer.json 里所有安装的依赖关系。
  • --strict: 当发生警告或者错误时返回一个非零的退出编码。

状态

如果你经常需要修改依赖项的代码并且他们是从源码中安装的, 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

选项

  • --rollback (-r): 回滚到你安装的上一个版本。
  • --clean-backups: 删除以前版本的备份,这使得当前版本的 Composer 会成为唯一的备份。
  • --no-progress: 不显示下载进度。
  • --update-keys: 提示用户升级 key。
  • --stable: 强制升级到稳定版。
  • --preview: 强制升级到预览版。
  • --snapshot: 强制升级到快照版。

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 以获取所有的设置项。

选项

  • --global (-g): 操作默认位于 $COMPOSER_HOME/config.json 的全局设置。 没有这个选项,命令则只会影响本地的 composer.json 文件或 --file 指定的文件。
  • --editor (-e): 通过环境变量 EDITOR 定义的文本编辑器打开本地的 composer.json 文件。通过 --global 参数可以打开全局配置文件。
  • --auth (-a): 影响验证文件(只配合 --editor 参数使用)。
  • --unset: 移除 setting-key 设置项。
  • --list (-l): 显示当前所有设置项。通过 --global 参数可以显示全局所有设置项。
  • --file="..." (-f): 操作指定的文件而不是 composer.json。注意此参数不可与 --global 联用。
  • --absolute: 当获取 -dir 设置项时返回绝对路径而不是相对路径。

修改仓库

除了修改设置项,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 检索包。

选项

  • --stability (-s): 包的最小稳定性,默认是 稳定版
  • --prefer-source: 尽可能从 源码 安装包。
  • --prefer-dist: 尽可能从 发布 安装包。
  • --repository: 自定义包的搜索仓库,会替代默认的 Packagist。可以使一个指向 composer 仓库的 HTTP 地址,一个指向本地 packages.json 文件的路径,或是一个 repositories 所接受的 JSON 字符串。
  • --dev: 安装 require-dev 里的依赖。
  • --no-dev: 不安装 require-dev 的依赖。
  • --no-scripts: 不执行根依赖中定义的脚本。
  • --no-progress: 移除进度条的显示来避免和一些终端或不支持退格字符的脚本冲突。
  • --no-secure-http: 安装根依赖的时候临时禁止 HTTP 安全校验。使用此参数风险自担。
  • --keep-vcs: 跳过已创建项目的 VCS 元数据删除。在非交互式环境中执行此命令会很有用。
  • --remove-vcs: 强制删除 VCS 元数据并不给任何提示。
  • --no-install: 禁止安装依赖。
  • --ignore-platform-reqs: 忽略 phphhvmlib-*ext-* 依赖并强制安装,即使本地计算机不能完全支持这些特性。

dump-autoload (dumpautoload)

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

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

选项

  • --no-scripts: 跳过定义在 composer.json 文件中脚本的执行。
  • --optimize (-o): 转换 PSR-0/4 autoloading 到 classmap 可以获得更快的加载支持。特别是在生产环境下建议这么做,但由于运行需要一些时间,因此并没有作为默认值。
  • --classmap-authoritative (-a):  仅从 classmap 加载类。会启用 --optimize
  • --apcu: 启用 APCu 来缓存所有类。
  • --no-dev: 禁止 autoload-dev 规则。

clear-cache (clearcache)

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

licenses

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

选项

  • --format: 格式化输出:文本或 JSON(默认是文本)。
  • --no-dev: 从输出中移除 dev 依赖。

run-script

选项

  • --timeout: 设置脚本执行超时时间,0为不超时。
  • --dev: 设置 dev 模式。
  • --no-dev: 关闭 dev 模式。
  • --list (-l): 列出用户定义的脚本。

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

exec

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

选项

  • --list (-l): 列出所有可用的 composer 执行文件。

diagnose

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

php composer.phar diagnose

archive

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

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

选项

  • --format (-f): 压缩文件的格式: tar 或 zip(默认是 tar)。
  • --dir: 将压缩文件保存到此目录(默认是当前路径)。
  • --file: 将压缩文件保存为给定的文件名。

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 文件。