composer基础知识
包版本说明:
1.0.2 你可以指定包的确切版本。
=1.0 >=1.0,<2.0 >=1.0,<1.1|>=1.2 通过使用比较操作符可以指定有效的版本范围。有效的运算符:>、>=、<、<=、!=。你可以定义多个范围,用逗号隔开,这将被视为一个逻辑AND处理。一个管道符号|将作为逻辑OR处理。 AND 的优先级高于 OR。
1.0.* 你可以使用通配符来指定一种模式。1.0.与>=1.0,<1.1是等效的。
~1.2 这对于遵循语义化版本号的项目非常有用。~1.2相当于>=1.2,<2.0。
composer install和update的区别:
install会优先检查composer.lock文件中确定的版本,不会更新各个包的最新版本。
updata会优先检查composer.json文件中定义的包版本号,检查最新的可用版本。
平台软件包和普通软件包
普通软件包是一个可安装的包(包含name属性,不含name属性的包不可被安装),通过require引入
平台软件包是已经安装在系统上的软件,包括PHP本身和一些扩展和库。composer show --platform查看可用列表。
例:
"require": {
"monolog/monolog": "1.0.*",
"php":">=5.6",
"ext-redis":">4.1"
}
root包
由 composer.json 定义的在你项目根目录的包,是一个上下文的关系,同一个包再不同地方用可能角色不一样。
包版本
通过vcs的信息自动推断出版本。以git为例,通过分支和标签判断出版本
标签:
命名规范:应该符合 'X.Y.Z' 或者 'vX.Y.Z' 的形式,-patch、-alpha、-beta 或 -RC 这些后缀是可选的。在后缀之后也可以再跟上一个数字。
例:
1.0.0
v1.0.0
1.10.5-RC1
v4.4.4beta2
v2.0.0-alpha
v2.0.4-p1
注:require指定版本号时前面的'v'不填
分支:
如果分支名看起来像一个版本号,会创建一个{分支名}-dev的包版本。如果分支名看起来不像版本号,会创建一个dev-{分支名}的包版本,如dev-master
1.x
1.0 (equals 1.0.x)
1.1.x
注:github上可以通过release功能来实现发布包版本
指定资源库
"repositories": [
{
"type": "vcs",
"url": "https://github.com/username/hello-world"
}
],
如果包已经发布到packagist上,就不需要指定该参数了。
一些基本命令行:
init 初始化一个composer.json文件
install 安装包
--prefer-source
--prefer-dist 稳定版本默认此选项,有更快的安装速度
--no-dev 跳过require-dev中列出的包
--no-scripts 跳过脚本
--no-plugins 关闭plugins
--optimize-autoloader (-o) 转换 PSR-0/4 autoloading 到 classmap 可以获得更快的加载支持(建议生产环境中使用)
update 更新包
参数和install类似
require 添加依赖
global 全局执行
search 搜索packagist.org上的包(如果配置了镜像则搜索镜像中的包)
show
包名:包的详细参数
--installed 已安装的包
--platform 平台软件包
--self 当前项目的信息
depends
查看某个包是否被其他包所依赖
validate
检测composer.json文件格式,提交前运行一遍
self-update 更新composer
config 配置
run-script 运行脚本
archive 归档
composer archive vendor/package 2.0.21 --format=zip
--format:tar/zip
--dir:默认当前目录
composer.json文件架构
标明root-only的只有当包是root包时才生效
name:包名,需发布时必须
description:描述,需发布时必须
version:版本,建议不填,会从VCS自动对应
type:安装类型
library 默认选项,简单的复制到vendor目录。
project 表示一个项目,例如框架程序,像yii2,laravel等。
其他两个很少用到(metapackage,composer-plugin)
keywords 关键词用于搜索过滤,数组格式,可选
homepage 项目url地址,可选
time 版本发布时间,可选
license 许可协议,MIT,Apache-2.0等。没研究过,一般填MIT。可选但是推荐填写。
authors 作者,可以有多个,每个可以包含name,email,homepage,role字段,可选但是推荐填写。
support 项目支持,email,issues,forum,wiki,irc,source等字段。
---------------------分割线---------------------------
以下对象都是填写包名:版本映射对象
**require ** 必须包含的包,可选
require-dev(root-only)**** 测试开发等需要用到的包,可选。root包的dev包默认会被安装,可以用--no-dev参数跳过。
conflict 冲突的包,不允许同时安装
replace 此列表中的包将会被当前包取代
---------------------分割线---------------------------
autoloader 自动加载
psr-4
{
"autoload": {
"psr-4": {
"Monolog1\\": "src/",
"Mono\\Log\\": "",
"Monolog2\\": ["src/", "lib/"]
}
}
}
classmap
自定义加载的不遵循psr-0/4规范的类库
{
"autoload": {
"classmap": ["src/", "lib/", "Something.php"]
}
}
在运行install/update后,存储在vendor/composer/autoload_classmap.php中
files
明确指定文件
{
"autoload": {
"files": ["src/MyLibrary/functions.php"]
}
}
minimum-stability(root-only)**** 通过稳定性过滤包,低于最低稳定性要求的包将会被过滤
dev 开发版本
alpha 内测版本
beta 公测版本
RC 候选版本
stable 稳定版本 默认
prefer-stable (root-only) 优先使用更稳定的包版本
**repositories **(root-only)**** 自定义资源库
https://docs.phpcomposer.com/05-repositories.html
config(root-only)**** 项目配置
https://docs.phpcomposer.com/04-schema.html#config
scripts(root-only) 脚本
https://docs.phpcomposer.com/articles/scripts.html
extra 提供脚本使用的额外数据