Composer Note

Composer 是 PHP 的一个依赖管理工具,类似于node.js的npm,相关收录的php包可以在packagist找到。下面是composer常用到的资源库,mark在笔记最前方便查阅

version

  • composer v1.5.5 : 截止2017-12-26前的最新版;
  • composer v1.2:

一、安装composer

1
2
3
4
5
6
7
8
9
10
11
12
$ mac
brew install composer
$ linux
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
$ windows
$ 下载安装 https://getcomposer.org/Composer-Setup.exe
$ 或者下载phar文件
php -r "readfile('https://getcomposer.org/installer');" | php
echo @php "%~dp0composer.phar" %*>composer.bat

二、composer配置

2.1 镜像的配置

packagist 是 Composer 的主要资源库。 一个 Composer 的库基本上是一个包的源:记录了可以得到包的地方。Packagist 的目标是成为大家使用库资源的中央存储平台。由于国内网络的问题composer源可以替换回国内, 操作方法如下

  • 设置为全局

composer config repo.packagist composer https://packagist.phpcomposer.com

composer 全量中国镜像:http://pkg.phpcomposer.com/

  • 应用内设置

上述命令将会在当前项目中的 composer.json 文件的末尾自动添加镜像的配置信息(你也可以自己手工添加):

1
2
3
4
5
6
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
}

2.2 配置语法

关于 require Key配置

第一件事情(并且往往只需要做这一件事),你需要在 composer.json 文件中指定 require key 的值。你只需要简单的告诉 Composer 你的项目需要依赖哪些包。

1
2
3
4
5
{
"require": {
"monolog/monolog": "1.0.*"
}
}

关于包名称和包版本可以参考文章http://docs.phpcomposer.com/01-basic-usage.html#Package-Names

更多配置内容请参考 composer.json 架构

三、使用composer

3.1 composer基础命令使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ 一些帮助命令
composer help
composer list
composer help require
$ composer 安装
composer init
$ 引入composer
composer require monolog/monolog
$ 创建项目语法:composer create-project 名称 目录 版本 参数
composer create-project slim/slim slim-2.6.2 2.6.2
composer create-project laravel/laravel learnlaravel5 5.2.31 --prefer-dist # 使用composer安装laravel
# 说明--prefer-dist:强制使用压缩包,而不是克隆源代码
composer install --no-dev # 非开发环境,不执行require-dev的包安装
php composer.phar update # 更新包 同 composer update
php composer.phar update monolog/monolog [...] # 只更新指定的依赖包

跟多关于composer的命令可以在这里看:http://docs.phpcomposer.com/03-cli.html

3.2 php使用composer

1) 自动加载

对于库的自动加载信息,Composer 生成了一个 vendor/autoload.php 文件。你可以简单的引入这个文件,你会得到一个自由的自动加载支持。

1
require 'vendor/autoload.php';

这使得你可以很容易的使用第三方代码。例如:如果你的项目依赖 monolog,你就可以像这样开始使用这个类库,并且他们将被自动加载。

1
2
3
4
$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
$log->addWarning('Foo');

另外还有其他方法实现composer的自动加载,方法如下

  1. 可以在 composer.json 的 autoload 字段中增加自己的 autoloader。
    1
    2
    3
    4
    5
    {
    "autoload": {
    "psr-4": {"Acme\\": "src/"}
    }
    }

Composer 将注册一个 PSR-4 autoloader 到 Acme 命名空间。添加 autoload 字段后,你应该再次运行 install 命令来生成 vendor/autoload.php 文件。

  1. 将包含调用的返回值存储在变量中,并添加更多的命名空间。这对于在一个测试套件中自动加载类文件是非常有用的,例如:
    1
    2
    $loader = require 'vendor/autoload.php';
    $loader->add('Acme\\Test\\', __DIR__);

3.3 升级composer

1
2
3
composer selfupdate
Use composer self-update --rollback to return to version 66efc9af8601234b8ab3a5fb91cfa7a2f30e9bbd

3.4 卸载包

  • 语法composer global remove {包名},比如composer global remove phpunit/phpunit

四、composer实战

4.1 使用composer配置laravel

1
2
3
# 安装指定版本的laravel
composer create-project laravel/laravel=5.1.* myProject

参考