一,什么是composer?
是php的一个依赖管理工具,它允许你申明项目依赖的代码库,它会为你在项目中安装它们。
二,安装
- composer官网 https://www.phpcomposer.com/
- 阿里云composer https://developer.aliyun.com/composer
三,常用命令
list(展示命令列表)
help(查看帮助)
depends(查看某个包是否依赖其他)
install
1.如果composer.lock有对应记录就按照lock文件的版本号安装
2.composer.lock所有的依赖都将被安装。
update
1.让依赖根据composer.json更新,重新生成composer.lock文件。
require
将依赖添加或更新到composer.json文件中,不存在就创建(升高或降低版本)
实例:composer require monolog/monolog:2.0
remove
1.用于移除composer.json中的拓展包。
2.可以加多个包,批量删除
global
1.作用:安装全局CLI工具和composer插件
实例:composer global require friendsofphp/php-cs-fixer
search
1,在packagist.org里面搜索
2,--only-name 只通过名称来搜索
3,--type搜索特定的包类型
show
1.列出本地可用的包。
--outdated 列出有新版本可用的包
--all 列出所有仓库中可用的包
--installed列出所有已安装的包
--platform只列出平台依赖
--available只列出可用的包
--self列出根依赖信息
--name-only(N)列出包名
--path(P)列出包路径
--tree以树的形式列出你的依赖
--lasted列出已安装的包包以及他们的最新版本
--minor-only列出有小的语义化的
--direct 限制列出你的直系依赖
--stnct如果包过期,返回非0值
--format返回输出格式
browse
在浏览器打开项目地址(github)
例如:composer browse monolog/monolog-H 打开首页
比如:composer browse topthink/thinkphp -H-s 显示仓库地址
例如:composer browse topthink/thinkphp -s
outdated(显示已安装的包版本和最新版本)
validate(检查composer.json语法是否合理)
self-update
作用:升级composer.phar到最新版本,也可以指定
--rollback(-r) 回滚到上一个版本。
config
对composer.json的参数查看和修改
--global(-g)$COMPOSER_HOME/config.json的全局设置
--unset:移除setting-key设置项
repository
修改仓库
语法:composer config repositories.foo vcs https://github.com/foo/bar[同时修改俩值]
实例:composer config repositories.tom vcs http://tom.com
create project
创建克隆一个项目,可以用composer create-project doctime/orm 2.2.*
dump
dump-autoload 生成自动加载目录
--optimize(-o) 将PSR-0/4自动加载转化为类映射,以获得更快的自动加载器,再次执行dump取消(composer dump-autoload)
composer dump-autoload -o 生成class-map映射
clear-cache
1,composer缓存目录清空
composer clear-cache
license
列出已万装每个包许可证的名称和版本
命令:composer license
其他参数:
--format 格式化输出:文本或json
--no-dev 从输出移除dev依赖
diagnose
自动检查一些常见的问题
Archive 命令会为给定版本生成一个zip/tar压缩包 ,也可以为整个项目生成一个压缩包
--file 命名压缩文件
check_platform_reqs
检查php和拓展版本是否满足已安装平台依赖的需求
命令:composer check-platform-reqs
四,composer的四种文件加载
1,psr-0和psr-4
1.推荐使用psr-4 添加类时,无需重新生成自动加载映射。
2.多个目录中加载相同前缀,可以指定为数组。
3.加载目录中所有命名空间的类,使用一个空前缀。autoload{
'psr-4':{
'APP\\':'shop',
'Name':['a','b'],
'':"member"
}
}
psr-0
路径:基础路径+命名空间+下级目录+下划线分割的目录+最后一个下划线的目录+文件名
文件组成:根据组成依次建立
文件的命名空间:NS+二级目录
autoload{
'psr-0':{
'Foo\\':"",
'hard\\':'src/'
}
}深入:
a.多个目录加载相同的前缀可以指定为数组
autoload{
'psr-0':{
'hard\\':['src/','app/']
}
}
b.直接指定到类,全局命名空间只有一个类的包
autoload{
'psr-0':{
'Foo':"",
}
}
c.全局备用前缀,加载目录中所有命名空间的类,可以使用一个空前缀。
autoload{
'psr-0':{
'':'src/'
}
}2.加载二级命名空间
autoload{
'psr-4':{
'Color\\Red\\':'style'
}
}
1.psr-4对应的直接为目标地址,类里命名空间也对应类里相同二级命名空间。
2.psr-0:对应的为二级目录,需要增加对应的目录结构
3.psr-0下的带下划线的命名空间不会转义。练习题
"autoload": {
"psr-4": {
"Controller\\ceshi\\": [
"src/Controller/",
"src/Model/"
],
"": [
"App"
]
},
"psr-0": {
"Hard\\": [
"zero/",
"zero1"
],
"zhi": "",
"": "all/",
"one\\two\\": "source/"
}
}2,classmap
路径:命名空间+类名
命名空间可以任意设置,但是不能跟其他的冲突。
下划线没有转义,非自动映射文件夹,每次新加文件都要dump"autoload":{
"classmap":["ceshi.php","ceshi/"]
}3.files
引入某个文件,加载包中无法自动加载的php函数(相当于require)。
不能引入文件夹,可以带命名空间
"autoload":{
"files":["ceshi.php"]
}
需要执行dump
五,composer.json结构
1,每个项目都是一个包,手动创建composer.json或者执行composer init
2,结合--quiet(-q) 不输出任何信息,快速生成空json文件。
3,结合部分参数,快速生成json文件
4, --name 拓展包名
--description 拓展包简介
--author 拓展包作者
--type 拓展包类型
library:默认值。它将复制文件到 vendor 目录。
project:它表示这是个项目,而不是库。比如像 Symfony 标准版这种应用。
metapackage:一个含有依赖的空包,能触发安装,但不包含文件,不会向文件系统写任何东西。
composer-install:为其他的定制类型的包提供安装器的包。
--homepage 拓展包主页
--require 拓展包版本约束,编写格式foo/bar:1.0.1
--require-dev 开发模式下约束,写法同 --require
--stability 最低的稳定版本 minimum-stability的值
--license 拓展包的授权协议
--repository 提供一个或多个自定义仓库,
六,composer资源库
定义:一个资源库是一个包的来源。它是一个 packages/versions 的列表。Composer 将查看所有你定义的 repositories 以找到你项目需要的资源包。
使用自定义的包资源库
类型:
composer (一个 composer 类型的资源库,是一个简单的网络服务器(HTTP、FTP、SSH)上的
packages.json
文件,它包含一个composer.json
对象的列表,有额外的dist
和/或source
信息。这个packages.json
文件是用一个 PHP 流加载的。你可以使用options
参数来设定额外的流信息。)pear(从 pear 获取资源)
vcs (从 git、svn 和 hg 取得资源)
package(如果你依赖于一个项目,它不提供任何对 composer 的支持,你就可以使用这种类型。你基本上就只需要内联一个
composer.json
对象)实例:
{ "repositories": [ { "type": "composer", "url": "http://packages.example.com" }, { "type": "composer", "url": "https://packages.example.com", "options": { "ssl": { "verify_peer": "true" } } }, { "type": "vcs", "url": "https://github.com/Seldaek/monolog" }, { "type": "pear", "url": "http://pear2.php.net" }, { "type": "package", "package": { "name": "smarty/smarty", "version": "3.1.7", "dist": { "url": "http://www.smarty.net/files/Smarty-3.1.7.zip", "type": "zip" }, "source": { "url": "http://smarty-php.googlecode.com/svn/", "type": "svn", "reference": "tags/Smarty_3_1_7/distribution/" } } } ] }
注意: 顺序是非常重要的,当 Composer 查找资源包时,它会按照顺序进行。默认情况下 Packagist 是最后加入的,因此自定义设置将可以覆盖 Packagist 上的包。
特殊类型:path,一种以本地代码添加快捷方式引用为资源包类型。
实例:
"repositories": { "local": { "type": "path", "url": "../phpunit/demo" } }
命令添加:
composer config repositories.ceshi path ../../junit-laravel:dev-master
七.别别窍
1.只更新单个包
composer update monolog/monolog
2.只更新composer.lock,不打算更新包
composer update nothing/--lock
3,快速创建一个composer.json
composer init --require=monolog/monolog:2.0 -n
4,提升加载速度(生成classmap映射)
composer dump-autoload -o