本文以laravel 5.4 为例
{
// 阅读解析于 2017.05.25
// by Object
//
// 以下key中的dev指的是开发状态下,如require-dev和autoload-dev都指开发状态下的自动导入和依赖
// dev状态并不冲突非dev状态
//
"name": "laravel/laravel", // 项目名称
"description": "The Laravel Framework.", // 描述
"keywords": ["framework", "laravel"], // 关键词
"license": "MIT", // 许可协议
"type": "project", // 类型
// 发布状态时的依赖
"require": {
"php": ">=5.6.4", // PHP版本
"barryvdh/laravel-debugbar": "^2.3", // laravel调试面板组件,类似于TP的trace
"erusev/parsedown": "^1.6", // php的markdown组件
"laravel/framework": "5.4.*", // laravel框架,5.4版本
"laravel/passport": "^2.0", // laravel框架第三方登录的服务端组件
"laravel/tinker": "~1.0", // laravel的REPL支持
"league/html-to-markdown": "^4.4", // PHP的html和markdown互相转变的组件
"naux/auto-correct": "^1.0", // 自动给中英文之间加入合理的空格并纠正专用名词大小写
"orangehill/iseed": "^2.3", // 根据现有数据库生成迁移文件的组件
"overtrue/laravel-lang": "^3.0", // 对laravel5的52种语言支持的组件
"predis/predis": "^1.1", // php交互redis的组件
"suin/php-rss-writer": "^1.5", // PHP 5.4 的简单RSS编辑器库
"tom-lingham/searchy": "^2.0",// PHP基于Mysql的模糊查询工具
"zgldh/qiniu-laravel-storage": "^0.6.3" // laravel 5 的七牛云sdk
},
// 开发状态时的依赖
"require-dev": {
"barryvdh/laravel-ide-helper": "^2.3", // 在生成Facade的同时自动生成PHPDocs的组件
"fzaninotto/faker": "~1.4", // PHP用于生成假数据的组件
"mockery/mockery": "0.9.*", // PHPUnit单元测试Mock组件
"phpunit/phpunit": "~5.7", // PHP单元测试测试框架
"symfony/css-selector": "3.1.*", // css选择器组件
"symfony/dom-crawler": "3.1.*" // PHP dom组件
},
// 自动加载
"autoload": {
// 类图加载模式,即建立文件和类的自动关系
// 如下面的定义,表示指定了database文件夹
// 当composer在 install/update 的时候,会扫描去扫描database文件夹下的所有.php、.inc文件,将它们内置的类加载进来
"classmap": [
"database"
],
// psr-4 / psr-0
// FIG组织制定的一组PHP相关规范,简称PSR,其中:
// PSR-0:自动加载
// PSR-1:基本代码规范
// PSR-2:代码样式
// PSR-3:日志接口
// PSR-4:自动加载
// 目前就这五个规范,乍一看,PSR-0和PSR-4是重复了
// 他们虽然功能有所重复,但实际上区别还是有的
// PSR-4的规范比较干净,不再兼容PHP5.3以前的版本,有一点PSR-0升级版的感觉
// 当然,PSR-4也不是要完全替代PSR-0,而是在必要的时候补充PSR-0
// 当然,如果你愿意,PSR-4也可以替代PSR-0
// PSR-4可以和包括PSR-0在内的其他自动加载机制共同使用
//
//
// 这组自动加载规则,简单说就是希望通过一组约定的目录,文件名,类名定义方式,来实现快速通过类查找到文件,然后包含进来,实现自动加载
// psr-0中,类名中的下划线会被转换成目录分隔符,而psr-4则无任何意义
"psr-4": {
"App\\": "app/", // 表示 “app/”目录的命名空间为 App\
"Models\\": "models/",// 表示 “models/”目录的命名空间为 Models\
"Persimmon\\": "app/Persimmon" // 表示 “app/Persimmon/”目录的命名空间为 Persimmon\
},
// 指定文件的加载模式,通常用于加载函数库,即通常没有什么命名空间的,面向过程式的文件 composer dump-autoload 可重建自动加载信息
"files": [
"app/Helper/function.php"
]
},
// 开发状态下的自动加载
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/" // tests文件夹下的命名空间为Tests
}
},
// composer中的脚本,可以是一个 PHP 回调(定义为静态方法),也可以是任何命令行可执行的命令。
// 在 Composer 运行过程中,脚本对于“执行一个资源包的自定义代码”或“包专用命令”是非常有用的。
// 只有在根包中定义scripts才有用,外部依赖的composer.json中定义了scripts是不会被执行的
"scripts": {
// 以下key指的是 执行脚本的事件,value是一个数组,定义了当触发该事件时,要执行的脚本
// 在 create-project 命令期间,根包安装完成后触发(注意,事件触发于“命令期间”、“根包安装完成后”)
"post-root-package-install": [
"php -r \"file_exists('.env') || copy('.env.example', '.env');\"" // 该命令会判断.env文件是否存在,如果不存在则把.env.example复制成.env
],
// 在 create-project 命令执行后触发
"post-create-project-cmd": [
"php artisan key:generate" // 项目创建完成后,根据字符串“generate”生成key
],
// 在 install 命令执行后触发
"post-install-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postInstall",
"php artisan optimize" // 优化应用程序性能,生成自动加载文件,且产生聚合编译文件 bootstrap/compiled.php
],
// 在 update 命令执行后触发
"post-update-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postUpdate",
"php artisan ide-helper:generate",
"php artisan ide-helper:meta",
"php artisan optimize"
]
},
// 项目配置
"config": {
// 设置 Composer 的默认安装方法
"preferred-install": "dist",
"sort-packages": true
},
// 自定义的包资源库
// 默认情况下 composer 只使用 packagist 作为包的资源库。
// repositories 并不是递归调用的,只能在“Root包”的 composer.json 中定义,附属包中的 composer.json 将被忽略。
//
"repositories": {
"packagist": {
// type指资源类型
// composer: composer 类型的资源库
// vcs: 从 git、svn 和 hg 取得资源。
// pear: 从 pear 获取资源。
// package: 如果你依赖于一个项目,它不提供任何对 composer 的支持,你就可以使用这种类型。你基本上就只需要内联一个 composer.json 对象
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
}
}
laravel 核心框架的文件在require中被包含,一切外部依赖都放在vendor中,它们都是相对独立的组件,核心框架也是一个独立的组件。
vendor目录下的组件会依赖于根目录下的部分文件夹
网友评论