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 的存在。
autoload_real.php
不管是哪种加载方式,最终生成命名空间跟目录的映射。 在composer/autoload_real中直接 require 所有在 autoload_files 中的文件,将 composer cli 生成的各种 autoload_psr4, autoload_classmap, autoload_namespaces(psr-0) 全都注册到 Composer/ClassLoader 中(包含命名空间和类)。 实际遇到类不存在时,先查找autoload_classmap中注册的类,然后Psr-4查找,最后psr-0查找。
新闻热点
疑难解答