Composer
Sat, Jan 9, 2016
下载安装Composer 到composer官网按照指示下载。官方建议的是用curl -sS https://getcomposer.org/installer | php这条命令。可能有些同学会迷惑这是在干什么,这其实是为了保证你下载到的总是最新的composer。分析一下,首先看到了管道,把前面curl获取的结果交给php执行,执行的结果就是下载了一个最新的composer.phar到当前目录下。这时虽然也可以说已经能用了,但通常我还会把它链接到/usr/local/bin目录下,方便使用。 sudo ln -s /home/frost/packages/composer.phar /usr/local/bin/composer 这时在终端输入composer就应该能看到它的帮助信息了。 配置Packagist 原本这不是必需的,但由于众所周知的原因,我还是建议配置一下。具体见这里。 composer config -g repositories.packagist composer http://packagist.phpcomposer.com就可以了。 composer.json 简单起见,这里使用monolog/monolog为例。 要使用composer,首先需要一个composer.json文件,它描述了项目依赖关系及其他一些元信息。 require关键字 require可能是你第一个也是唯一需要制定的东西。它用来告诉Composer你的项目需要依赖哪些包。 { "require": { "monolog/monolog": "1.0.*" } } 如你所见,require接受一个包含包名(monolog/monolog)和版本限制(1.0.*)的映射的对象。 包名 包名由vendor名和项目名组成。两者经常会是相同的——vendor名的存在只是为了避免名称冲突。它可以允许两个人创建同一个名称的库json,这样两个包名就可能是igorw/json和seldaek/json了。 这里我们“需要”monolog/monolog,所以vendor名和项目名一样。建议对项目使用唯一的名字。稍后还允许同一个命名空间下的多个项目。如果你在维护一个库,这可以让你很容易的把它分成多个解耦的小部分。 包版本 上面的例子中我们“需要”版本1.0.*,这表示1.0版本的所有分支。 版本限制可以用多种不同的方式,这里给出了详细的解释。 稳定性 默认情况下只考虑稳定版本。如果你也希望用RC, beta, alpha或者开发版,可以用稳定性标识。为了不用为每个包单独设置稳定性标识,还可以用最小稳定性 安装依赖 要安装依赖,只需要执行composer install即可。 这会找到符合版本限制的最新版本的monolog/monolog,并且把它下载到vendor目录。把第三方的代码放在一个名为vendor的目录是一个规范。在本例中,会把它放在vendor/monolog/monolog。 如果你使用git,通常会把vendor目录放在.gitignore中。 你会注意到composer install命令还会在当前目录下生成一个composer.lock文件。 composer.lock锁文件 安装完依赖后,Composer会把它安装的精确版本号写入composer.lock文件中。它把项目锁定在某个特定的版本号。 把composer.lock文件和composer.json一起提交到版本控制中。这很重要,因为install命令会检查锁文件是否存在,如果存在,它就会下载指定的精确版本,否则就会按照composer.json的描述下载符合约束的最新版本。 这意味着每个下载了你的项目的人看到的都是完全相同的代码,不会因为依赖更新了就自动更新依赖。update命令会将依赖更新到符合要求的最新版本,然后更新锁文件。 update命令也可以指定单独的包名来更新指定的包。 Packagist Packagist是Composer的信息库。一个Composer信息库本质上是一个包的源——从这里你可以获取包。Packagist希望成为每个人用的中心信息库。这意味着你可以自动require任何这里存在的包。 自动加载 对于指定了自动加载信息的库,Composer会生成一个vendor/autoload.php文件。你可以放心的include这个文件而Composer会完成剩下的工作。 require __DIR__ . '/vendor/autoload.php'; 这让使用第三方代码很方便。比如,如果你的项目依赖Monolog,你可以马上开始使用它的类,它会被自动加载。 $log = new Monolog\Logger('name'); $log->pushHandler(new Monolog\Handler\StreamHandler('app.