Composer

1. 介绍

Composer是一个PHP依赖管理工具。它允许你声明你的项目依赖的库,并且帮助你管理(安装/升级)它们。

2. 依赖管理

Composer不是你所认为的Yum或者Apt那样的包管理器。它基于单个项目的基础处理“包”或者库,将依赖包安装在项目中的一个目录下(比如:vendor)。默认它不会全局安装。所以,尽管它支持全局安装,它仍是一个依赖管理器。

Composer深受nodenpmrubybundler思想的启发。

3. Composer要点

3.1 composer.json v.s. composer.lock

如果从来没有执行过composer install的话,是不会有 composer.lock 文件存在的,Composer 解决composer.json文件中所列的依赖后,下载它们的对应版本到项目的 vendor 目录下。

当Composer完成了安装,它会将所有包的准确的版本记录到composer.lock文件中,将项目依赖锁定到切确的版本。我们应该将composer.lock文件commit到项目中。

composer update命令会根据composer.json来下载满足要求的最新版并且更新composer.lock。

3.2 Autoloading

Composer会生成vendor/autoload.php文件,你只需要简单的将这个文件include到你的项目中,你就可以使用这些库中的类了。

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

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

你甚至可以在composer.json中的 autoload字段里加上你自己的代码使之能被自动加载。

{
    "autoload": {
        "psr-4": {"Acme\\": "src/"}
    }
}
1
2
3
4
5

Composer将会为Acme注册一个PSR-4的自动加载器。上面定义了一个命名空间到目录的mappingsrc目录将会是你的项目的根目录,和vendor是一个等级。src目录下的Foo.php包含一个Acme\Foo类。

3.3 JSON schema

type

默认是library。 包的类型指定了安装逻辑。Composer原生支持以下四种类型:

  • library: 默认值,简单的复制文件到vendor
  • project: 这意味着是一个项目而不是一个库。
  • metapackage:一个空的包,里面包含了依赖,会引发它们的安装,但是不包含任何文件,也不会写入任何文件。
  • composer-plugin:提供其他包的安装器
最近更新: 1/24/2019, 12:54:13 PM