PHP的学习

3,composer.json文件

2017-05-26  本文已影响50人  陈钢镚学财

本文以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目录下的组件会依赖于根目录下的部分文件夹

本文出自半醒的狐狸博客

上一篇下一篇

猜你喜欢

热点阅读