Gryen-GTD 升级日志,composer 详解

许久没有更新过本博客系统了,前些天有朋友想使用本系统搭建自己的博客,发现看着我给的文档根本无从下手,无奈之下我发邮件向我求助。如果对 Linux、PHP、MySQL 等有基本的了解,以目前系统的状态,我也是无能为力的。怪自己懒,更新不及时。Gryen-GTD 更新频率视个人情况,有时更新较为频繁,有时几个月也不会有代码提交。开始此项目时,仅仅作为自己的一个实验,主要帮助自己熟悉 PHP 及周边知识,以免长时间不接触 PHP 的工作后遗忘。做的有点儿样子后,将其开源,希望能借助开源提高一下自己的编程水平,如果有幸能帮到一些朋友或有朋友对此感兴趣,可以共同开发,也算是额外的激励了。

最近有时间维护下此项目,发现果然遗忘了很多,连 composer 都有点儿搞不懂了。

Composer

Composer 是 PHP 的一个依赖管理工具,类比与 Node 的 npm,通常,它会将 packages 安装到项目的 vendor 文件夹中,相当于 npm 的 node_modules。关于它的详细介绍可阅读Composer 中文文档。Composer 常用的命令如下:

  • composer install:如有 composer.lock 文件,会直接安装,否则,它会根据 composer.json 配置文件安装依赖;
  • composer require xxx [--dev]:它会安装xxxpackage,并将其记录到 composer.json 文件中,添加--dev参数可安装只在开发过程中使用的 package;
  • composer update:按照 composer.json 中给定的规则,升级依赖到最新版本,并且升级 composer.lock 文件
  • composer dump-autoload:只更新自动加载而不去更新依赖

composer.json 文件详解

以 laravel 的 composer.json 文件举例:

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": [
        "framework",
        "laravel"
    ],
    "license": "MIT",
    "require": {
        "php": "^7.1.3",
        "fideloper/proxy": "^4.0",
        "laravel/framework": "5.7.*",
        "laravel/tinker": "^1.0"
    },
    "require-dev": {
        "beyondcode/laravel-dump-server": "^1.0",
        "filp/whoops": "^2.0",
        "fzaninotto/faker": "^1.4",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^2.0",
        "phpunit/phpunit": "^7.0"
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ]
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "scripts": {
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ]
    }
}

  • 其中,license 及前面的节点是对项目的说明。
  • require 是项目发布需要的依赖
  • require-dev 是项目开发以及测试过程中需要的依赖
  • config 是一些配置,以上面为例:
    • optimize-autoloader:在 dump 的时候是否自动优化
    • preferred-install:设置 Composer 的默认安装方法,其他可能的值:source、dist、auto(默认值),source 是全部,dist 不包括版本信息,相当于去掉 package 的 .git 目录
    • sort-packages:用来保证当引入新的 package 的时候,composer.json 中的 packages 按照 package name 排序
  • extra 是供 scripts 使用的额外数据
  • autoload 和 autoload-dev:PHP autoloader 的自动加载映射
    • classmap:生成支持支持自定义加载的不遵循 PSR-0/4 规范的类库
    • files:这个配置上面没有,但是很可能会用到,这个可以明确指定在每次请求中都会载入的文件,比如定义的一些公共方法
  • minimum-stability:指定安装 package 时的最低稳定性要求,可能的值:dev、alpha、beta、RC、stable
  • prefer-stable:设置为 true,优先使用 package 的稳定版本
  • scripts 指定在安装的不同阶段挂载的脚本
    • post-autoload-dump:在自动加载器被转储后触发,无论是 install/update 还是 dump-autoload 命令都会触发。
    • post-root-package-install:在 create-project 命令期间,根包安装完成后触发。
    • post-create-project-cmd:在 create-project 命令执行后触发。

其他配置的解释可参考:composer.json

PHP autoload 的一点儿记录

classmap 引用的所有组合,都会在 install/update 过程中生成,并存储到 vendor/composer/autoload_classmap.php 文件中。这个 map 是经过扫描指定目录(同样支持直接精确到文件)中所有的 .php 和 .inc 文件里内置的类而得到的。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注