许久没有更新过本博客系统了,前些天有朋友想使用本系统搭建自己的博客,发现看着我给的文档根本无从下手,无奈之下我发邮件向我求助。如果对 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]
:它会安装xxx
package,并将其记录到 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 文件里内置的类而得到的。
发表回复