在 PHP 中安装、使用 Composer 包管理工具

Composer 是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件。

0. 相关资源及概述

  • Composer官网 https://getcomposer.org

  • Composer Github 地址 https://github.com/composer/composer

  • Composer中国镜像 http://www.phpcomposer.com

  • 阿里云全量镜像(👍 推荐):https://developer.aliyun.com/composer

  • Packagist

    官网:https://packagist.org

    它是 Composer 主要的一个包信息存储库,包开发者将具体代码托管到 Github 上,将包信息提交到 Packagist 上,这样使用者就可以通过 Composer 去使用。它的执行顺序如下:

    • 首先,Composer 根据本地定义的 composer.json 信息去查询 Packagist;
    • 其次,Packagist 根据 composer.json/package.json 信息解析,最终对应到Github 仓库;
    • 最后,Composer 基于 Github 仓库上的 composer.json 下载代码到本地。
  • composer.json

    这是 Composer 的核心,主要用来配置 Composer 的执行规则。

  • 自动加载

    Composer 基于 PHP 命名空间和 PSR-4 标准开发、集成了一个自动加载器。

1. 安装配置

1.1. 下载 composer.phar

  • Linux / Unix / OSX

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # 下载
    ➜ curl -sS https://getcomposer.org/installer | php

    # 如果上面的 curl 命令出错或无法使用,可用 php 命令代替
    ➜ php -r "readfile('https://getcomposer.org/installer');" | php

    # ----- 下面是其它的一些参数 -----

    # --install-dir 指定下载目录
    ➜ curl -sS https://getcomposer.org/installer | php -- --install-dir=bin

    # --filename 指定下载成功存放的 composer 文件名
    ➜ curl -sS https://getcomposer.org/installer | php -- --filename=composer

    # --version 下载指定版本的 composer
    ➜ curl -sS https://getcomposer.org/installer | php -- --version=1.0.0-alpha8
  • Windows

    方式一:使用安装器 👍

    下载、运行 Composer-Setup.exe ,将自动下载 composer 并配置好相关环境变量,之后可直接使用命令 composer

    方式二:点击这里手动下载

1.2. 配置

下载得到 composer.phar 文件后,我们就可以通过如下命令来使用了

1
2
3
4
5
6
# 查看 Composer 版本
➜ php composer.phar -V
Composer version 1.4.1 2017-03-10 09:29:45

# 查看 Composer 帮助
➜ php composer.phar

为了更好的使用 Composer,在 Linux 系统下,我们可以通过如下方式简化命令:

1
2
3
4
5
6
➜ sudo mv composer.phar /usr/local/bin/composer
➜ sudo chmod+x /usr/local/bin/composer

# 现在可以直接使用 composer 来操作了
➜ composer -V
Composer version 1.4.1 2017-03-10 09:29:45

⚠️ 注意:如果提示找不到命令之类,需检查系统环境变量设置中是否包含路径 /usr/local/bin

2. 基本使用

这里以安装一个二维码组件为例,包的标识为 endroid/qrcode

2.1. 安装依赖包

  • 方式一:使用 composer require 命令

    格式: composer require 包的标识(厂商名/包名)

    1
    2
    3
    mkdir -p ~/www/composer_demo
    cd ~/www/composer_demo
    ➜ composer require endroid/qrcode
  • 方式二:使用 composer install 命令

    在项目根目录下编辑 composer.json 文件,通过 require 配置项目依赖的包,如下:

    1
    2
    3
    4
    5
    {
    "require": {
    "endroid/qrcode": "^2.2"
    }
    }

    然后使用以下命令进行安装

    1
    ➜ composer install

包安装好之后,目录结构如下

1
2
3
4
5
6
7
8
9
10
11
12
13
➜ tree -L 2
.
├── composer.json -----> 项目通过 composer 设置的配置信息
├── composer.lock -----> 锁定项目,只使用其列出的具体版本的包
└── vendor -----> 组件本源码存放位置
├── autoload.php
├── bacon
├── composer
├── endroid
├── khanamiryan
├── myclabs
├── paragonie
└── symfony

2.2. 使用安装的包

在需要使用包的 PHP 文件头部添加以下代码:

1
require 'vendor/audoload.php';

现在参考组件的说明文档,开始使用吧!

3. 常用命令

更多详细命令介绍请访问这里或直接执行 composer commands help

3.1. composer init

以命令行交互方式创建 composer.json 并初始化项目的依赖、描述等信息,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
➜ composer init


Welcome to the Composer config generator



This command will guide you through creating your composer.json config.

Package name (<vendor>/<name>) [sunqiang/test]: company/package1
Description []:
Author [whorusq <whorusq@gmail.com>, n to skip]:
Minimum Stability []:
Package Type (e.g. library, project, metapackage, composer-plugin) []:
License []:

Define your dependencies.

Would you like to define your dev dependencies (require-dev) interactively [yes]? no

{
"name": "company/package1",
"authors": [
{
"name": "whorusq",
"email": "whorusq@gmail.com"
}
],
"require": {}
}

Do you confirm generation [yes]? yes
➜ ll
total 8
-rw-r--r-- 1 user1 staff 170B 9 4 13:45 composer.json

3.2. composer install

这是最常用的命令,Composer 会根据本地的 composer.json 安装需要的依赖包。

下载下来的包放入项目下的 vendor 目录中,同时将安装时候的包版本信息放入到 composer.lock 文件,以便锁定版本。

⚠️ 注意

  • 如果当前目录下存在 composer.lock 文件,它会从此文件读取依赖版本,而不是根据 composer.json 文件去获取依赖。这确保了该库的每个使用者都能得到相同的依赖版本。

  • 如果没有 composer.lock 文件,composer 将在处理完依赖关系后创建它。

3.3. composer update

为了获取依赖的最新版本,并且升级 composer.lock 文件

1
2
3
4
5
6
7
8
# 项目目录(composer.json 所在位置)下执行
➜ composer update

# 如果你只是想更新几个包,你可以像这样分别列出它们:
➜ composer update vendor/package vendor/package2

# 你还可以使用通配符进行批量更新:
➜ composer update vendor/*

3.4. composer config

用以编辑 Composer 的一些基本设置

  • 全局配置:COMPOSER_HOME/config.json
  • 非全局配置:当前项目的目录下 composer.json

3.5. composer create-project

从现有的包中创建一个新的项目。这相当于执行了一个 git clonesvn checkout 命令后将这个包的依赖安装到它自己的 vendor 目录。

此命令有几个常见的用途:

  • 快速的部署你的应用。
  • 检出任何资源包,并开发它的补丁。
  • 多人开发项目,可以用它来加快应用的初始化。

默认情况下,这个命令会在 packagist.org 上查找你指定的包。

示例

1
2
# 通过 Composer 下载、初始化 ThinkPHP5.x
➜ composer create-project topthink/think tp5 --prefer-dist

3.6. composer require

增加新的依赖包到当前目录的 composer.json 文件中,并且在添加或改变依赖时, 修改后的依赖关系将被安装或者更新。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 默认交互模式
➜ composer require
Search for a package: gearman

Found 15 packages matching gearman

[0] mhlavac/gearman
[1] silverstripe-australia/gearman
[2] dmank/gearman
[3] pafelin/gearman

...

Enter package # to add, or the complete package name if it is not listed: 0
Enter the version constraint to require (or leave blank to use the latest version):
Using version ^0.1.0 for mhlavac/gearman
Search for a package: ^C

# 非交互模式,直接指定需要的包名
➜ composer require mhlavac/gearman

3.7. self-update

将 Composer 自身升级到最新版本

1
2
➜ composer self-update
You are already using composer version 1.5.1 (stable channel).