Composer 架构:
name 包名
type 安装类型
library: 这是默认类型,它会简单的将文件复制到 vendor
目录
project: 这表示当前包是一个项目,而不是一个库。
metapackage: 当一个空的包,包含依赖并且需要触发依赖的安装,这将不会对系统写入额外的文件。
composer-plugin: 一个安装类型为 composer-plugin
的包,它有一个自定义安装类型,可以为其它包提供一个 installler。
require 依赖
"require": { "php": ">=5.3.2" },
自动加载映射 autoload
提供如下自动加载类型 classmap
psr-0
psr-4
files
理论上来说,项目代码用 psr-4 自动加载, helper 用 files 自动加载,development 相关用 classmap 自动加载。 psr-0 已经被抛弃了,不过有些历史遗留依然在用,所以偶尔也会看到。
"name": "phpunit/phpunit", "autoload": { "classmap": [ "src/" ] },代码目录为:vendor/phpunit/phpunit/src. classmap引用的所有类,都会在 install/update 过程中生成,并存储到 vendor/composer/autoload_classmap.php 文件中。这个 map 是经过扫描指定目录(或精确到文件)所有的 .php 和 .inc 文件里内置的类而得到的。
"name": "doctrine/inflector", "autoload": { "psr-0": { "Doctrine\\Common\\Inflector\\": "lib/" } },代码目录为: vendor/doctrine/inflector/lib/Doctrine/Common/Inflector/. psr-0 的标准主要考虑到了 <5.2 的 php 中 类似 Acme_Util_ClassName 这样的写法, 会把下划线分解成目录。
"name": "illuminate/database", "autoload": { "psr-4": { "Illuminate\\Database\\": "" } },代码目录为:vendor/illuminate/database/。 psr-4 不在解析类中的下划线,命名空间相当于目录结构。
"name": "paragonie/random_compat", "autoload": { "files": ["lib/random.php"] }
可能会有一些全局的 helper function 的存在。