美文网首页PHP的学习
3,composer.json文件

3,composer.json文件

作者: 陈钢镚学财 | 来源:发表于2017-05-26 09:50 被阅读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目录下的组件会依赖于根目录下的部分文件夹

    本文出自半醒的狐狸博客

    相关文章

      网友评论

        本文标题:3,composer.json文件

        本文链接:https://www.haomeiwen.com/subject/xfptfxtx.html