composer

composer介绍

基本用法

简介

对于咱们的基本用法介绍,咱们将安装monolog/monolog一个日志库。php

注意:为简单起见,本简介假设你已执行composer的本地安装。

composer.json:项目设置

要在项目中开始使用composer,您只须要一个composer.json文件。此文件描述了项目的依赖关系,也可能包含其余元数据。git

在require关键

您指定的第一个(一般也是惟一的)composer.json是require密钥。您只是告诉composer您的项目所依赖的包。json

{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

如您所见,require采用将包名称(例如monolog/monolog)映射到版本约束(1.0.*)的对象。数组

composer使用此信息在您使用repositories秘钥注册的软件包“存储库”中搜索 正确的文件集,或者在默认软件包存储库Packagist中搜索。在上面的示例中,因为没有在composer.json文件中注册其余存储库,所以假定monolog/monolog包已在Packagist上注册。(请在下面查看有关Packagist的更多信息,或者在此处阅读有关存储库的更多信息)。服务器

包名称

包名由供应商名称和项目名称组成。一般这些都是相同的-供应商名称仅用于防止命名冲突。例如,它容许两个不一样的人建立一个名为的库json。一个可能被命名igorw/json而另外一个被命名为seldaek/json。架构

阅读有关在此处发布包和包命名的更多信息。(请注意,您还能够将“平台软件包”指定为依赖项,容许您须要某些版本的服务器软件。请参阅下面的平台软件包。)app

包版本约束

在咱们的示例中,咱们使用版本约束请求包monolog包1.0.*。这意味着1.0开发分支中的任何版本,或者任何大于或者等于1.0且小于1.1(>=1.0 <1.1)的版本。composer

请阅读版本以获取有关版本的更深刻信息,版本之间的相互关系以及版本限制。curl

composer如何下载正确的文件?在指定依赖时composer.json,composer首先获取您请求的包名称,并在使用该repositories键注册的任何存储库中搜索它。若是您还没有注册任何额外的存储库,或者在您指定的存储库中找不到具备该名称的软件包,则会退出Packagist(更多信息以下)。测试

当composer在Packagist或者您指定的repo中找到正确的包时,它会使用包的vcs的版本控制功能(即分支和标记)来尝试找到您指定的版本约束的最佳匹配。请务必阅读版本文章中的版本和程序解析。

注意:若是您尝试要求程序包但composer会引起有关程序包稳定性的错误,则您指定的版本可能不符合默认的最低稳定性要求。默认状况下,在vcs中搜索有效的软件包版本时,仅考虑稳定版本。
若是您尝试要求包的dev,alpha,beta或者rc版本,则可能会遇到此问题。阅读有关稳定性标志和架构页面minimum-stability上的键的更多信息。

安装依赖项

要为项目安装已定义的依赖项,请运行该install命令。

php composer.phar install

运行此命令时,可能会发生如下两种状况之一:

没有安装composer.lock

若是您以前从未运行过该命令而且也没有composer.lock文件存在,则composer指挥解析composer.josn文件中列出的全部依赖项,并将其最新版本的文件下载到vendor项目的目录中。(该vendor目录是项目中全部第三方代码的常规位置)。在上面的示例中,您将最终得到monolog源文件vendor/monolog/monolog/。若是monolog列出了任何依赖项,那么它们也会下下面的文件夹中vendor/。

提示:若是您使用的git为您的项目,你可能要添加vendor在你的.gitignore。您真的不想将全部第三方代码添加版本化的存储库中。

当composer完成安装后,它会将全部软件包及其下载的确切版本写入composer.lock文件,将项目锁定到这些特定版本。您应该将composer.lock文件提交到项目仓库,以便全部在项目上工做的人都被锁定到相同版本的依赖项(下面更多)。

用 安装composer.lock

这将咱们带到第二种状况。若是在运行时已存在composer.lock文件和composer.json文件composer install,则表示您install以前运行该命令,或者项目中其余人运行该install命令并将该composer.lock文件提交到项目(这很好)。

不管哪一种方式,install当composer.lock文件存在时运行会解析并安装您列出的全部依赖项composer.json,但composer会使用列出的确切版本composer.lock来确保程序包版本对于处理项目的每一个人都是一致的。所以,您将拥有composer.json文件请求的全部依赖项,但它们可能并不是都是最新的可用版本。这是设计的,它确保您的项目不会由于依赖项的意外更改而中断。

将composer.lock文件提交到版本控制

将此文件提交给VC很是重要,由于它会致使设置项目的任何人使用您正在使用的彻底相同的依赖项版本。您的CI服务器,生产计算机,团队开发中其余的开发人员,全部的人和每一个人都运行相同的依赖关系,从而减小了仅影响部署的某些部分的错误的可能性。即便您单独开发,在从新安装项目的六个月内,即便您的依赖项从那时起发布了许多新版本,您任然能够确信所安装的依赖项任然有效。(请参阅下面有关使用update命令的说明。)

将依赖项更新为其最新版本

如上所述,该composer.lock文件阻止您自动获取最新版本的依赖项。要更新到最新版本,请使用该update命令。这将获取最新的匹配版本(根据您的composer.json文件)并使用新版本更新锁定文件。(这至关于删除composer.lock文件并install再次运行。)

php composer.phar update

注意:install若是composer.lock因为对composer.json可能影响依赖项解析的更改而未更新,则composer将在执行命令时显示警告。

若是您只想安装或者更新一个依赖项,能够将它们列入白名单:
php composer.phar update monolog/monolog

注意:对于库,没必要提交锁定文件。

Packagist

Packagist是composer的主要存储库。composer存储库基本上是一个包源:一个能够从中获取包的地方。Packagist意在成为每一个人都使用的中央存储库。这意味着您能够自动使用require任何可用的包,而无需进一步指定composer应查找包的位置。

若是您访问Packagist网站(packagist.org),您能够浏览并搜索包。

建议使用composer的任何开源项目在Packagist上发布它们的包。库不须要在Packagist上供composer使用,但它能够更快地发现和采用其余开发人员。

平台包

composer具备平台包,这些包是安装在系统上但实际上不能由composer安装的虚拟包。这包括PHP自己,PHP扩展和一些系统库。

- php表示用户的PHP版本,容许您应用约束,例如^7.1.要求64位版本的PHP,您能够要求php-64bit包。
- hhvm表示hhvm运行时的版本,并容许您应用约束,例如^2.3.
- ext-<name>容许您须要PHP扩展(包括核心扩展)。版本控制在这里可能很是不一致,所以将约束设置为一般是个好主意*。扩展包名称的示例是ext-gd。
- lib-<name>容许对PHP使用的库版本进行约束。如下是可供选择:curl,iconv,icu,libxml,openssl,pcre,uuid,xsl。

您可使用show --platform获取本地可用平台包的列表。

自动加载

对于指定自动加载信息的库,composer会生成一个vendor/autoload.php文件。您能够简单地包含此文件并开始使用这些库提供的类,而无需任何额外的工做:

require DIR . '/vendor/autoload.php';

$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\SreamHandler('app.log', Monolog\Logger::WARNING));
$log->addWarning('Foo');

您甚至能够经过添加autoload字段将本身的代码添加到自动装带器中composer.json。

{
"autoload": {
"psr-4": {
"Acme\": "src/"
}
}
}

composer将为命名空间注册PSR-4自动加载器Acme。

您能够定义从名称空间到目录的映射。该src目录将位于项目根目录中,与vendor目录位于同一级别。示例文件名将src/Foo.php包含一个Acme\Foo类。

添加autoload字段后,必须从新运行dump-autoload才能从新生成vendor/autoload.php文件。
包含该文件也将返回自动加载器示例,所以您能够将include条用的返回值存储在变量中并添加更多名称空间。例如,这对于在测试套件中自动加载类很是有用。

$loader = require DIR . '/vendor/autoload.php';
$loader->addPsr4('Acme\Test\', DIR);

除了psr-4自动加载外,composer还支持psr-0,类映射和文件自动加载。有关autoload更多信息,请参阅参考。

另请参阅有关优化自动装载器的文档。

注意:composer提供本身的自动加载器。若是您不想使用该vendor/composer/autoload_*.php文件,则能够包含文件,这些文件关联数组容许您配置本身的自动加载器。

相关文章
相关标签/搜索