composer.json 记录了项目中依赖库的关系、版本信息、其他数据等。

基础属性

{
    "name": "phpoffice/phpspreadsheet",
    "description": "Read, Create and Write Spreadsheet documents in PHP",
    "keywords": ["PHP", "OpenXML", "Excel", "xlsx", "xls"],
    "type": "library",
    "license": "MIT",
    "authors": [
        {
            "name": "Maarten Balliauw",
            "homepage": "https://blog.maartenballiauw.be"
        }
    ]
}

name, 包名,包括作者名称和项目名称,以/分割;包名称可以包含任何字符,包括空格,并且不区分大小写。为了简化安装,建议定义一个不包含非字母数字字符或空格的短名称;

description,项目描述;

keywords, 关键词,用于搜索与筛选;

type,包的类型,默认为library, 原生支持以下 4 种类型:

  • library: 默认类型,它只需要将文件复制到 vendor 目录。
  • project: 当前包是一个项目,而不是一个库。
  • metapackage: 包含需求并将触发其安装的空包,但不包含文件,并且不会向系统写入任何内容。因此这种安装类型并不需要一个 dist 或 source。
  • composer-plugin: 一个安装类型为 composer-plugin 的包,它有一个自定义安装类型,可以为其它包提供一个 installler。

只有在安装过程中需要自定义逻辑时才使用自定义类型。建议省略该字段并将其默认为库 library

license,包的许可证,对于开源项目通常需要一个开源许可证,开源项目许可协议参考 SPDX License List

authors,包作者,包括name email homepage role属性。

依赖项

{
    "require": {
        "php": "^7.2",
        "markbaker/complex": "^1.4",
        "markbaker/matrix": "^1.2",
        "psr/simple-cache": "^1.0"
    },
    "require-dev": {
        "dompdf/dompdf": "^0.8.5",
        "friendsofphp/php-cs-fixer": "^2.16",
        "jpgraph/jpgraph": "^4.0",
        "mpdf/mpdf": "^8.0",
        "phpcompatibility/php-compatibility": "^9.3",
        "phpunit/phpunit": "^8.5",
        "squizlabs/php_codesniffer": "^3.5",
        "tecnickcom/tcpdf": "^6.3"
    }
}

require, 必须安装的依赖包列表,这些包必须满足条件,否则不会安装。

require-dev,开发或运行测试时的依赖包列表。

自动加载映射

{
    "autoload": {
        "psr-4": {
            "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "PhpOffice\\PhpSpreadsheetTests\\": "tests/PhpSpreadsheetTests"
        }
    }
}

autoload 支持 PSR-4PSR-0 规范的自动加载,以及classmap的创建和files的引用,推荐使用 PSR-4 规范。

autoload-dev 开发或运行测试时的自动加载规则。

脚本

Composer 允许在安装过程的各个部分中执行脚本,也可以自定义脚本。脚本可以是PHP回调(定义为静态方法),也可以是任何命令行可执行命令,参考Scripts

{
    "scripts": {
        "test": "phpunit",
        "fix": [
            "php-cs-fixer fix --ansi"
        ]
    }
}

例如执行自定义脚本:

composer test

等同于直接执行phpunit命令。

以上只是介绍了composer.json的主要属性,更详细的介绍可以参考官方文档