Composer 是PHP的依赖管理工具。

composer安装

  1. curl -sS https://getcomposer.org/installer | php
  2. mv composer.phar /usr/local/bin/composer

注意: 如果上诉命令因为权限执行失败, 请使用 sudo 再次尝试运行 mv 那行命令。

使用 Composer

composer.json文件

要开始在你的项目中使用 Composer,你只需要一个 composer.json 文件。该文件包含了项目的依赖和其它的一些元数据。
以laravel框架composer.json文件为例:

  1. {
  2. "name": "laravel/lumen",
  3. "description": "The Laravel Lumen Framework.",
  4. "keywords": ["framework", "laravel", "lumen"],
  5. "license": "MIT",
  6. "type": "project",
  7. "require": { # 项目需要的依赖包
  8. "php": ">=7.1.3",
  9. "laravel/lumen-framework": "5.6.*",
  10. "vlucas/phpdotenv": "~2.2",
  11. "predis/predis": "^1.1",
  12. # 包名称 : 包版本
  13. "monolog/monolog": "1.0.*",
  14. "illuminate/redis": "^5.6"
  15. },
  16. "require-dev": {
  17. "fzaninotto/faker": "~1.4",
  18. "phpunit/phpunit": "~7.0",
  19. "mockery/mockery": "~1.0"
  20. },
  21. "autoload": {
  22. "psr-4": {
  23. "App\\": "app/"
  24. }
  25. },
  26. "autoload-dev": {
  27. "classmap": [
  28. "tests/",
  29. "database/"
  30. ]
  31. },
  32. "scripts": {
  33. "post-root-package-install": [
  34. "php -r \"copy('.env.example', '.env');\""
  35. ]
  36. },
  37. "minimum-stability": "dev",
  38. "prefer-stable": true,
  39. "config": {
  40. "optimize-autoloader": true
  41. }
  42. }

包版本说明

在上面的例子中,我们引入的 monolog 版本指定为 1.0.*。这表示任何从 1.0 开始的开发分支,它将会匹配 1.0.01.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
赋值运算符2 ^1.2 ~^的意思很接近,在x.y的情况下是一样的都是代表x.y <= 版本号 < (x+1).0,但是在版本号是x.y.z的情况下有区别,举个例子吧:
- ~1.2.3 代表 1.2.3 <= 版本号 < 1.3.0
- ^1.2.3 代表 1.2.3 <= 版本号 < 2.0.0

安装依赖包

获取定义的依赖到你的本地项目,只需要在项目目录下运行下面命令。

  1. composer install

接着前面的例子,这将会找到 monolog/monolog 的最新版本,并将它下载到 vendor 目录。

小技巧: 如果你正在使用Git来管理你的项目, 你可能要添加 vendor 到你的 .gitignore 文件中。 你不会希望将所有的代码都添加到你的版本库中。

另一件事是 install 命令将创建一个 composer.lock 文件到你项目的根目录中。

composer.lock - 锁文件

在安装依赖后,Composer 将把安装时确切的版本号列表写入 composer.lock 文件。这将锁定改项目的特定版本。
请提交你应用程序的 composer.lock (包括 composer.json)到你的git版本库中
这是非常重要的,因为 install 命令将会检查锁文件是否存在,如果存在,它将下载指定的版本(忽略 composer.json 文件中的定义)。
这意味着,任何人建立项目都将下载与指定版本完全相同的依赖。你的持续集成服务器、生产环境、你团队中的其他开发人员、每件事、每个人都使用相同的依赖,从而减轻潜在的错误对部署的影响。即使你独自开发项目,在六个月内重新安装项目时,你也可以放心的继续工作,即使从那时起你的依赖已经发布了许多新的版本。
如果不存在 composer.lock 文件,Composer 将读取 composer.json 并创建锁文件。
这意味着如果你的依赖更新了新的版本,你将不会获得任何更新。此时要更新你的依赖版本请使用 update 命令。这将获取最新匹配的版本(根据你的 composer.json 文件)并将新版本更新进锁文件。

  1. composer update

如果只想安装或更新一个依赖,你可以白名单它们:

  1. php composer.phar update monolog/monolog [...]

Packagist

packagist 是 Composer 的主要资源库。 一个 Composer 的库基本上是一个包的源:记录了可以得到包的地方。Packagist 的目标是成为大家使用库资源的中央存储平台。这意味着你可以 require 那里的任何包。
当你访问 packagist website (packagist.org),你可以浏览和搜索资源包。
任何支持 Composer 的开源项目应该发布自己的包在 packagist 上。虽然并不一定要发布在 packagist 上来使用 Composer,但它使我们的编程生活更加轻松。

自动加载

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

  1. require 'vendor/autoload.php';

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

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

你可以在 composer.jsonautoload 字段中增加自己的 autoloader。

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

Composer 将注册一个 PSR-4 autoloader 到 Acme 命名空间。
你可以定义一个从命名空间到目录的映射。此时 src 会在你项目的根目录,与 vendor 文件夹同级。例如 src/Foo.php 文件应该包含 Acme\Foo 类。
添加 autoload 字段后,你应该再次运行 install 命令来生成 vendor/autoload.php 文件。
引用这个文件也将返回 autoloader 的实例,你可以将包含调用的返回值存储在变量中,并添加更多的命名空间。这对于在一个测试套件中自动加载类文件是非常有用的,例如。

  1. $loader = require 'vendor/autoload.php';
  2. $loader->add('Acme\\Test\\', __DIR__);

除了 PSR-4 自动加载,classmap 也是支持的。这允许类被自动加载,即使不符合 PSR-0 规范。

注意: Composer 提供了自己的 autoloader。如果你不想使用它,你可以仅仅引入 vendor/composer/autoload_*.php 文件,它返回一个关联数组,你可以通过这个关联数组配置自己的 autoloader。

安装依赖

现在我们将使用 Composer 来安装项目的依赖。

  1. composer install

更新依赖

开发软件时,时常记得保持依赖的更新。经常执行命令:

  1. composer update

当然对于新版本要测试一下