Composer是 PHP 用来管理依赖的工具,提供了科学的第三方包的模块化及更新方案。
运行原理
composer.json声明项目依赖
composer工具前往packagist.org仓库获取包的元数据信息
composer工具根据元数据信息前往GitHub等代码托管平台获取第三方包
安装Composer
版本要求 PHP 5.3.2+
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer # 下载composer
composer config -g repo.packagist composer https://packagist.phpcomposer.com # 全局配置composer源为中国镜像源
composer global require "hirak/prestissimo:^0.3" # 全局安装 ”composer并行下载插件“
export PATH=$PATH:~/.composer/vendor/bin # 全局composer库执行路径加入环境变量
sudo chmod a+x /usr/local/bin/composer # 增加可执行权限
#### 日常升级composer ####
composer selfupdate
基本使用
新起Composer项目
常规启动
composer init -n 当前目录创建空的composer.json文件
带依赖启动
composer init --require=包名 -n
克隆一个包
composer create-project 包名 保存路径 版本号
声明依赖
命令描述
composer require [--dev] 包名
配置文件描述
编辑 composer.json
卸载依赖
composer remove 包名
自动加载
应用启动入口增加 require 'vendor/autoload.php';
安装依赖
composer install --profile --prefer-dist --optimize-autoloader
--profile 显示时间和内存使用信息
--optimize-autoloader 优化自动加载获得20%~25%提升
--prefer-dist 大幅加快下载速度 ,忽略包下的.git目录从而回避对根目录git系统的影响
更新依赖
只更新指定包
composer update 包名 --prefer-dist
只刷新composer.lock,不更新依赖
通用处理:composer update nothing
新版处理:composer update --lock
版本锁定
composer.lock来管理
项目代码需要版本锁定
库代码不应该版本锁定
生产环境部署优化
优化自动加载
composer dump-autoload --optimize
常用命令
composer show --installed # 已安装的依赖 composer show -p # 已安装的平台软件包(包括php拓展)
注意
composer在vendor目录下安装的子项目有其自身的git版本控制系统
项目根下的git不对这些子项目进行管理
如有管理需求则需要删除子项目的.git目录
非官方Repo引入方式
1. git版本库
{
"type":"git",
"url":"ssh://....git"
}
2. path本地路径
{
"type":"path",
"url":"包的相对路径"
}
自动加载
文件
{
"autoload": {
"files": [
"文件路径",
]
}
}
源类型
composer源
{
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
git源
{
"type": "git",
"url": "git地址"
}
path源
{
"type": "path",
"url": "包的相对目录路径"
}
语义话版本号
组成
Major.Minor.Patch
Major 大版本更新,不向后兼容
Minor小版本更新,向后兼容
Patch补丁修复,向后兼容
示例
确切版本号 1.0.0
范围版本号 >=1.0.0
通配符版本号 1.0.*
向后兼容的最小版本(下一个重要版本)~
~1.0 => 1.0<= X < 2.0
~1.0.0 => 1.0.0<= X < 1.1
大版本前的所有版本(下一个安全版本)^
^1.0 => 1.0<= X < 2.0
^1.0.0 => 1.0.0<= X < 2.0.0
创建Composer包
流程
创建包目录
composer init初始化配置
实现包逻辑
第三方代码托管平台推送项目,并配置同步更新到packagist.org
packagist.org提交项目地址