本文档根据Composer中国官方文档经过整理编排而成,相对官方文档更符合常规的思维和操作习惯,方便上手,内容比较全,但如需更详细的内容,请查看官方文档
简介
Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。
安装 - Windows
使用安装程序
这是将 Composer 安装在你机器上的最简单的方法。
下载并且运行 Composer-Setup.exe,它将安装最新版本的 Composer ,并设置好系统的环境变量,因此你可以在任何目录下直接使用 composer
命令。
安装 - *nix
下载 Composer 的可执行文件
局部安装
要真正获取 Composer,我们需要做两件事。首先安装 Composer (同样的,这意味着它将下载到你的项目中):
curl -sS https://getcomposer.org/installer | php
你可以通过 --install-dir
选项指定 Composer 的安装目录(它可以是一个绝对或相对路径):
curl -sS https://getcomposer.org/installer | php -- --install-dir=bin
全局安装
你可以将此文件放在任何地方。如果你把它放在系统的 PATH
目录中,你就能在全局访问它。 在类Unix系统中,你甚至可以在使用时不加 php
前缀。
你可以执行这些命令让 composer
在你的系统中进行全局调用:
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
配置 Packagist 镜像
修改 composer 的全局配置文件(推荐方式)
打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:
因为Composer中国镜像比较慢,这里推荐使用阿里云镜像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
使用 Composer
如果你进行了全局安装,并且没有 phar 文件在当前目录,请使用下面的命令代替:
要检查 Composer 是否正常工作,只需要在命令行输入:
composer
这将返回给你一个可执行的命令列表。
初始化项目 init
在 “库” 那一章我们看到了如何手动创建 composer.json
文件。实际上还有一个 init
命令可以更容易的做到这一点。
当您运行该命令,它会以交互方式要求您填写一些信息,同时聪明的使用一些默认值。
composer init
初始化-参数
- --name: 包的名称。
- --description: 包的描述。
- --author: 包的作者。
- --homepage: 包的主页。
-
--require: 需要依赖的其它包,必须要有一个版本约束。并且应该遵循
foo/bar:1.0.0
这样的格式。 - --require-dev: 开发版的依赖包,内容格式与 --require 相同。
-
--stability (-s):
minimum-stability
字段的值。
申明依赖 require
require
命令增加新的依赖包到当前目录的 composer.json
文件中。
composer require
在添加或改变依赖时, 修改后的依赖关系将被安装或者更新。
如果你不希望通过交互来指定依赖包,你可以在这条令中直接指明依赖包。
composer 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 目录下执行其它命令,像 install
、require
或 update
。
并且如果你将 $COMPOSER_HOME/vendor/bin
加入到了 $PATH
环境变量中,你就可以用它在命令行中安装全局应用,下面是一个例子:
composer global require fabpot/php-cs-fixer:dev-master
现在 php-cs-fixer
就可以在全局范围使用了(假设你已经设置了你的 PATH)。如果稍后你想更新它,你只需要运行 global update
:
composer global update
安装 install
install
命令从当前目录读取 composer.json
文件,处理了依赖关系,并把其安装到 vendor
目录下。
composer 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
命令。
composer update
这将解决项目的所有依赖,并将确切的版本号写入 composer.lock
。
如果你只是想更新几个包,你可以像这样分别列出它们:
composer update vendor/package vendor/package2
你还可以使用通配符进行批量更新:
composer 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 同时更新白名单内包的依赖关系,这将进行递归更新。
搜索 search
search
命令允许你为当前项目搜索依赖包,通常它只搜索 packagist.org 上的包,你可以简单的输入你的搜索条件。
composer search monolog
您也可以通过传递多个参数来进行多条件搜索。
搜索-参数
- --only-name (-N): 仅针对指定的名称搜索(完全匹配)。
展示 show
列出所有可用的软件包,你可以使用 show
命令。
composer show
如果你想看到一个包的详细信息,你可以输入一个包名称。
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
你甚至可以输入一个软件包的版本号,来显示该版本的详细信息。
composer show monolog/monolog 1.0.2
包名称
包名称由供应商名称和其项目名称构成。通常容易产生相同的项目名称,而供应商名称的存在则很好的解决了命名冲突的问题。它允许两个不同的人创建同样名为 json
的库,而之后它们将被命名为 igorw/json
和 seldaek/json
。
这里我们需要引入 monolog/monolog
,供应商名称与项目的名称相同,对于一个具有唯一名称的项目,我们推荐这么做。它还允许以后在同一个命名空间添加更多的相关项目。如果你维护着一个库,这将使你可以很容易的把它分离成更小的部分。
包版本
在前面的例子中,我们引入的 monolog 版本指定为 1.0.*
。这表示任何从 1.0
开始的开发分支,它将会匹配 1.0.0
、1.0.2
或者 1.0.20
。
版本约束可以用几个不同的方法来指定。
名称 | 实例 | 描述 | ||
---|---|---|---|---|
确切的版本号 | 1.0.2 |
你可以指定包的确切版本。 | ||
范围 |
>=1.0 `>=1.0,<2.0``>=1.0,<1.1 |
>=1.2` | 通过使用比较操作符可以指定有效的版本范围。 有效的运算符:> 、>= 、< 、<= 、!= 。 你可以定义多个范围,用逗号隔开,这将被视为一个逻辑AND处理。一个管道符号` |
`将作为逻辑OR处理。 AND 的优先级高于 OR。 |
通配符 | 1.0.* |
你可以使用通配符* 来指定一种模式。1.0.* 与>=1.0,<1.1 是等效的。 |
||
赋值运算符 | ~1.2 |
这对于遵循语义化版本号的项目非常有用。~1.2 相当于>=1.2,<2.0 。想要了解更多,请阅读下一小节。 |
下一个重要版本(波浪号运算符)
~
最好用例子来解释: ~1.2
相当于 >=1.2,<2.0
,而 ~1.2.3
相当于 >=1.2.3,<1.3
。正如你所看到的这对于遵循 语义化版本号 的项目最有用。一个常见的用法是标记你所依赖的最低版本,像 ~1.2
(允许1.2以上的任何版本,但不包括2.0)。由于理论上直到2.0应该都没有向后兼容性问题,所以效果很好。你还会看到它的另一种用法,使用 ~
指定最低版本,但允许版本号的最后一位数字上升。
注意: 虽然
2.0-beta.1
严格地说是早于2.0
,但是,根据版本约束条件, 例如~1.2
却不会安装这个版本。就像前面所讲的~1.2
只意味着.2
部分可以改变,但是1.
部分是固定的。
稳定性
默认情况下只有稳定的发行版才会被考虑在内。如果你也想获得 RC、beta、alpha 或 dev 版本,你可以使用 稳定标志。你可以对所有的包做 最小稳定性 设置,而不是每个依赖逐一设置。
安装依赖包
获取定义的依赖到你的本地项目,只需要调用 composer
运行 install
命令。
composer install
接着前面的例子,这将会找到 monolog/monolog
的最新版本,并将它下载到 vendor
目录。 这是一个惯例把第三方的代码到一个指定的目录 vendor
。如果是 monolog 将会创建 vendor/monolog/monolog
目录。
小技巧: 如果你正在使用Git来管理你的项目, 你可能要添加
vendor
到你的.gitignore
文件中。 你不会希望将所有的代码都添加到你的版本库中。
另一件事是 install
命令将创建一个 composer.lock
文件到你项目的根目录中。
composer.lock
- 锁文件
在安装依赖后,Composer 将把安装时确切的版本号列表写入 composer.lock
文件。这将锁定改项目的特定版本。
请提交你应用程序的 composer.lock (包括 composer.json)到你的版本库中
这是非常重要的,因为 install
命令将会检查锁文件是否存在,如果存在,它将下载指定的版本(忽略 composer.json
文件中的定义)。
这意味着,任何人建立项目都将下载与指定版本完全相同的依赖。你的持续集成服务器、生产环境、你团队中的其他开发人员、每件事、每个人都使用相同的依赖,从而减轻潜在的错误对部署的影响。即使你独自开发项目,在六个月内重新安装项目时,你也可以放心的继续工作,即使从那时起你的依赖已经发布了许多新的版本。
如果不存在 composer.lock
文件,Composer 将读取 composer.json
并创建锁文件。
这意味着如果你的依赖更新了新的版本,你将不会获得任何更新。此时要更新你的依赖版本请使用 update
命令。这将获取最新匹配的版本(根据你的 composer.json
文件)并将新版本更新进锁文件。
php composer.phar update
如果只想安装或更新一个依赖,你可以白名单它们:
php composer.phar update monolog/monolog [...]
注意: 对于库,并不一定建议提交锁文件 请参考:库的锁文件.
自动加载
对于库的自动加载信息,Composer 生成了一个 vendor/autoload.php
文件。你可以简单的引入这个文件,你会得到一个免费的自动加载支持。
require 'vendor/autoload.php';
这使得你可以很容易的使用第三方代码。例如:如果你的项目依赖 monolog,你就可以像这样开始使用这个类库,并且他们将被自动加载。
$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 将注册一个 PSR-4 autoloader 到 Acme
命名空间。
你可以定义一个从命名空间到目录的映射。此时 src
会在你项目的根目录,与 vendor
文件夹同级。例如 src/Foo.php
文件应该包含 Acme\Foo
类。
添加 autoload
字段后,你应该再次运行 install
命令来生成 vendor/autoload.php
文件。
引用这个文件也将返回 autoloader 的实例,你可以将包含调用的返回值存储在变量中,并添加更多的命名空间。这对于在一个测试套件中自动加载类文件是非常有用的,例如。
$loader = require 'vendor/autoload.php';
$loader->add('Acme\\Test\\', __DIR__);
除了 PSR-4 自动加载,classmap 也是支持的。这允许类被自动加载,即使不符合 PSR-0 规范。详细请查看 自动加载-参考。
注意: Composer 提供了自己的 autoloader。如果你不想使用它,你可以仅仅引入
vendor/composer/autoload_*.php
文件,它返回一个关联数组,你可以通过这个关联数组配置自己的 autoloader。
库(资源包)
本章将告诉你如何通过 Composer 来安装你的库。
- 库(资源包)
每一个项目都是一个包
<u>只要你有一个 composer.json
文件在目录中,那么整个目录就是一个包。</u>当你添加一个 require
到项目中,你就是在创建一个依赖于其它库的包。你的项目和库之间唯一的区别是,你的项目是一个没有名字的包。
为了使它成为一个可安装的包,你需要给它一个名称。你可以通过 composer.json
中的 name
来定义:
{
"name": "acme/hello-world",
"require": {
"monolog/monolog": "1.0.*"
}
}
在这种情况下项目的名称为 acme/hello-world
,其中 acme
是供应商的名称。供应商的名称是必须填写的。
注意: 如果你不知道拿什么作为供应商的名称, 那么使用你 github 上的用户名通常是不错的选择。 虽然包名不区分大小写,但惯例是使用小写字母,并用连字符作为单词的分隔。
平台软件包
Composer 将那些已经安装在系统上,但并不是由 Composer 安装的包视为一个虚拟的平台软件包。这包括PHP本身,PHP扩展和一些系统库。
-
php
表示用户的 PHP 版本要求,你可以对其做出限制。例如>=5.4.0
。如果需要64位版本的 PHP,你可以使用php-64bit
进行限制。 -
hhvm
代表的是 HHVM(也就是 HipHop Virtual Machine) 运行环境的版本,并且允许你设置一个版本限制,例如,'>=2.3.3'。 -
ext-<name>
可以帮你指定需要的 PHP 扩展(包括核心扩展)。通常 PHP 拓展的版本可以是不一致的,将它们的版本约束为*
是一个不错的主意。一个 PHP 扩展包的例子:包名可以写成ext-gd
。 -
lib-<name>
允许对 PHP 库的版本进行限制。
以下是可供使用的名称:curl
、iconv
、icu
、libxml
、openssl
、pcre
、uuid
、xsl
。
你可以使用 composer show --platform
命令来获取可用的平台软件包的列表。
指明版本
你需要一些方法来指明自己开发的包的版本,当你在 Packagist 上发布自己的包,它能够从 VCS (git, svn, hg) 的信息推断出包的版本,因此你不必手动指明版本号,并且也不建议这样做。请查看 标签 和 分支 来了解版本号是如何被提取的。
如果你想要手动创建并且真的要明确指定它,你只需要添加一个 version
字段:
{
"version": "1.0.0"
}
注意: 你应该尽量避免手动设置版本号,因为标签的值必须与标签名相匹配。
标签
对于每一个看起来像版本号的标签,都会相应的创建一个包的版本。它应该符合 'X.Y.Z' 或者 'vX.Y.Z' 的形式,-patch
、-alpha
、-beta
或 -RC
这些后缀是可选的。在后缀之后也可以再跟上一个数字。
下面是有效的标签名称的几个例子:
- 1.0.0
- v1.0.0
- 1.10.5-RC1
- v4.4.4beta2
- v2.0.0-alpha
- v2.0.4-p1
注意: 即使你的标签带有前缀
v
, 由于在需要require
一个版本的约束时是不允许这种前缀的, 因此v
将被省略(例如标签V1.0.0
将创建1.0.0
版本)。
Packagist 镜像使用方法
镜像用法
有两种方式启用本镜像服务:
-
系统全局配置: 即将配置信息添加到 Composer 的全局配置文件
config.json
中。见“方法一” -
单个项目配置: 将配置信息添加到某个项目的
composer.json
文件中。见“方法二”
方法一: 修改 composer 的全局配置文件(推荐方式)
打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:
复制
composer config -g repo.packagist composer https://packagist.phpcomposer.com
方法二: 修改当前项目的 composer.json
配置文件:
打开命令行窗口(windows用户)或控制台(Linux、Mac 用户),进入你的项目的根目录(也就是 composer.json
文件所在目录),执行如下命令:
复制
composer config repo.packagist composer https://packagist.phpcomposer.com
上述命令将会在当前项目中的 composer.json
文件的末尾自动添加镜像的配置信息(你也可以自己手工添加):
复制
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
}
以 laravel 项目的 composer.json
配置文件为例,执行上述命令后如下所示(注意最后几行):
复制
{
"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
来体验飞一般的速度吧!
镜像原理:
一般情况下,安装包的数据(主要是 zip 文件)一般是从 github.com
上下载的,安装包的元数据是从 packagist.org
上下载的。
然而,由于众所周知的原因,国外的网站连接速度很慢,并且随时可能被“墙”甚至“不存在”。
“Packagist 中国全量镜像”所做的就是缓存所有安装包和元数据到国内的机房并通过国内的 CDN 进行加速,这样就不必再去向国外的网站发起请求,从而达到加速 composer install
以及 composer update
的过程,并且更加快速、稳定。因此,即使 packagist.org
、github.com
发生故障(主要是连接速度太慢和被墙),你仍然可以下载、更新安装包。
解除镜象:
如果需要解除镜像并恢复到 packagist 官方源,请执行以下命令:
复制
composer config -g --unset repos.packagist
执行之后,composer 会利用默认值(也就是官方源)重置源地址。
将来如果还需要使用镜像的话,只需要根据前面的“镜像用法”中介绍的方法再次设置镜像地址即可。
命令行
你已经学会了如何使用命令行界面做一些事情。本章将向你介绍所有可用的命令。
为了从命令行获得帮助信息,请运行 composer
或者 composer list
命令,然后结合 --help
命令来获得更多的帮助信息。
- 命令行
- 全局参数
- 进程退出代码
-
初始化
init
- - 参数 -
安装
install
- - 参数 -
更新
update
- - 参数 -
申明依赖
require
- - 参数 - 全局执行
global
-
搜索
search
- - 参数 -
展示
show
- - 参数 -
依赖性检测
depends
- - 参数 - 有效性检测
validate
- 依赖包状态检测
status
-
自我更新
self-update
- - 参数 -
更改配置
config
- - 使用方法 - - 参数 - - 修改包来源 -
创建项目
create-project
- - 参数 -
打印自动加载索引
dump-autoload
- - 参数 - 查看许可协议
licenses
- 执行脚本
run-script
- 诊断
diagnose
-
归档
archive
- - 参数 - 获取帮助信息
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
在 “库” 那一章我们看到了如何手动创建 composer.json
文件。实际上还有一个 init
命令可以更容易的做到这一点。
当您运行该命令,它会以交互方式要求您填写一些信息,同时聪明的使用一些默认值。
composer init
初始化-参数
- --name: 包的名称。
- --description: 包的描述。
- --author: 包的作者。
- --homepage: 包的主页。
-
--require: 需要依赖的其它包,必须要有一个版本约束。并且应该遵循
foo/bar:1.0.0
这样的格式。 - --require-dev: 开发版的依赖包,内容格式与 --require 相同。
-
--stability (-s):
minimum-stability
字段的值。
申明依赖 require
require
命令增加新的依赖包到当前目录的 composer.json
文件中。
composer require
在添加或改变依赖时, 修改后的依赖关系将被安装或者更新。
如果你不希望通过交互来指定依赖包,你可以在这条令中直接指明依赖包。
composer 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 目录下执行其它命令,像 install
、require
或 update
。
并且如果你将 $COMPOSER_HOME/vendor/bin
加入到了 $PATH
环境变量中,你就可以用它在命令行中安装全局应用,下面是一个例子:
composer global require fabpot/php-cs-fixer:dev-master
现在 php-cs-fixer
就可以在全局范围使用了(假设你已经设置了你的 PATH)。如果稍后你想更新它,你只需要运行 global update
:
composer global update
安装 install
install
命令从当前目录读取 composer.json
文件,处理了依赖关系,并把其安装到 vendor
目录下。
composer 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
命令。
composer update
这将解决项目的所有依赖,并将确切的版本号写入 composer.lock
。
如果你只是想更新几个包,你可以像这样分别列出它们:
composer update vendor/package vendor/package2
你还可以使用通配符进行批量更新:
composer 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 同时更新白名单内包的依赖关系,这将进行递归更新。
搜索 search
search
命令允许你为当前项目搜索依赖包,通常它只搜索 packagist.org 上的包,你可以简单的输入你的搜索条件。
composer search monolog
您也可以通过传递多个参数来进行多条件搜索。
搜索-参数
- --only-name (-N): 仅针对指定的名称搜索(完全匹配)。
展示 show
列出所有可用的软件包,你可以使用 show
命令。
composer show
如果你想看到一个包的详细信息,你可以输入一个包名称。
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
你甚至可以输入一个软件包的版本号,来显示该版本的详细信息。
composer show monolog/monolog 1.0.2
展示-参数
- --installed (-i): 列出已安装的依赖包。
- --platform (-p): 仅列出平台软件包(PHP 与它的扩展)。
- --self (-s): 仅列出当前项目信息。
依赖性检测 depends
depends
命令可以查出已安装在你项目中的某个包,是否正在被其它的包所依赖,并列出他们。
composer 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
文件是否是有效的
composer validate
有效性检测参数
- --no-check-all: Composer 是否进行完整的校验。
依赖包状态检测 status
如果你经常修改依赖包里的代码,并且它们是从 source(自定义源)进行安装的,那么 status
命令允许你进行检查,如果你有任何本地的更改它将会给予提示。
composer status
你可以使用 --verbose
系列参数(-v|vv|vvv)来获取更详细的详细:
composer status -v
You have changes in the following dependencies:
vendor/seld/jsonlint:
M README.mdown
自我更新 self-update
将 Composer 自身升级到最新版本,只需要运行 self-update
命令。它将替换你的 composer.phar
文件到最新版本。
composer self-update
如果你想要升级到一个特定的版本,可以这样简单的指定它:
composer self-update 1.0.0-alpha7
如果你已经为整个系统安装 Composer(参见 全局安装),你可能需要在 root
权限下运行它:
sudo composer self-update
自我更新-参数
- --rollback (-r): 回滚到你已经安装的最后一个版本。
- --clean-backups: 在更新过程中删除旧的备份,这使得更新过后的当前版本是唯一可用的备份。
更改配置 config
config
命令允许你编辑 Composer 的一些基本设置,无论是本地的 composer.json
或者全局的 config.json
文件。
composer config --list
更改配置-使用方法
config [options] [setting-key] [setting-value1] ... [setting-valueN]
setting-key
是一个配置选项的名称,setting-value1
是一个配置的值。可以使用数组作为配置的值(像 github-protocols
),多个 setting-value
是允许的。
有效的配置选项,请查看“架构”章节的 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
命令还支持通过以下方法修改来源信息:
composer config repositories.foo vcs http://github.com/foo/bar
创建项目 create-project
你可以使用 Composer 从现有的包中创建一个新的项目。这相当于执行了一个 git clone
或 svn checkout
命令后将这个包的依赖安装到它自己的 vendor 目录。
此命令有几个常见的用途:
- 你可以快速的部署你的应用。
- 你可以检出任何资源包,并开发它的补丁。
- 多人开发项目,可以用它来加快应用的初始化。
要创建基于 Composer 的新项目,你可以使用 "create-project" 命令。传递一个包名,它会为你创建项目的目录。你也可以在第三个参数中指定版本号,否则将获取最新的版本。
如果该目录目前不存在,则会在安装过程中自动创建。
composer 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
你可以运行此命令来手动执行 脚本,只需要指定脚本的名称,可选的 --no-dev
参数允许你禁用开发者模式。
诊断 diagnose
如果你觉得发现了一个 bug 或是程序行为变得怪异,你可能需要运行 diagnose
命令,来帮助你检测一些常见的问题。
composer diagnose
归档 archive
此命令用来对指定包的指定版本进行 zip/tar 归档。它也可以用来归档你的整个项目,不包括 excluded/ignored(排除/忽略)的文件。
composer archive vendor/package 2.0.21 --format=zip
归档-参数
- --format (-f): 指定归档格式:tar 或 zip(默认为 tar)。
- --dir: 指定归档存放的目录(默认为当前目录)。
获取帮助信息 help
使用 help
可以获取指定命令的帮助信息。
composer 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)目录到 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 <proxy url>
来单独设置 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/<user>/.composer
。 - OSX
/Users/<user>/.composer
。 - Windows
C:\Users\<user>\AppData\Roaming\Composer
。
COMPOSER_HOME/config.json
你可以在 COMPOSER_HOME
目录中放置一个 config.json
文件。在你执行 install
和 update
命令时,Composer 会将它与你项目中的 composer.json
文件进行合并。
若 全局 和 项目 存在相同配置项,那么项目中的 composer.json
文件拥有更高的优先级。
COMPOSER_CACHE_DIR
COMPOSER_CACHE_DIR
环境变量允许你设置 Composer 的缓存目录,这也可以通过 cache-dir
进行配置。
它在各个系统上的默认值分别为:
- *nix and OSX
$COMPOSER_HOME/cache
。 - Windows
C:\Users\<user>\AppData\Local\Composer
或%LOCALAPPDATA%/Composer
。
COMPOSER_PROCESS_TIMEOUT
这个环境变量控制着 Composer 执行命令的等待时间(例如:git 命令)。默认值为300秒(5分钟)。
COMPOSER_DISCARD_CHANGES
这个环境变量控制着 discard-changes config option。
COMPOSER_NO_INTERACTION
如果设置为1,这个环境变量将使 Composer 在执行每一个命令时都放弃交互,相当于对所有命令都使用了 --no-interaction
。可以在搭建 虚拟机/持续集成服务器 时这样设置。
{
"repositories": [
{
"packagist": false
}
]
}