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查找。
新聞熱點
疑難解答