本文总结了composer
提供的常用命令及composer.json结构解析
查看composer配置参数。带 -l 参数表示查看composer参数,不带 -l 表示设置composer参数,带-g表示针对全局参数,下面是一些示例
# 查看 composer全局参数
$ composer config -l -g
# 查看 composer 安装目录
$ composer config -l -g | grep home
# 设置composer全局镜像地址为阿里云镜像平台
$ composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
升级composer到最新版本
$ composer selfupdate
# 以下命令含义相同
$ composer self-update
使用 create-project 从现有的包中创建一个新的项目,相当于执行了 git clone 命令后,同时安装该项目的依赖,如果没有指定版本号,将安装最新版本。
可以加上 --prefer-dist 参数,表示当有可用的包时,从 dist 安装。
# 安装 Laravel 项目
$ composer create-project --prefer-dist laravel/laravel blog 5.5.*
$ composer create-project laravel/laravel blog 5.5.*
$ composer create-project nineworlds/ulp-php-client ulp_new
安装一个或多个依赖,Composer 会先找到合适的版本,然后更新composer.json文件,再把相关的依赖下载下来进行安装,最后更新 composer.lock 文件并生成 php 的自动加载文件。
# 命令格式,版本号是可选参数,不带表示下载最新版本
$ composer require 组件名1[:组件1版本号] 组件名2[:组件2版本号] ...
# 命令示例
$ composer require monolog/monolog:1.25.4 guzzlehttp/guzzle
# 引入1.1 以上版本本的 predis/predis
$ composer require predis/predis ^1.1
执行下面的命令
$ composer require guzzlehttp/guzzle
在composer.json中依赖版本结果示例如下,也就是未来如果发布了更新的6.x版本,比如6.6、6.7版本,通过composer update可以更新依赖的 guzzle,但是无法更新到未来的 7.X及以上版本
"require": {
"guzzlehttp/guzzle": "^6.5"
}
如果想安装dev依赖,可以加上–dev参数,命令示例如下:
composer require --dev phpunit/phpunit
生成的composer.json效果示例如下
"require-dev": {
"phpunit/phpunit": "^9.5"
},
如果执行install
命令所在目录存在composer.lock
文件,则以composer.lock
为标准去下载依赖,如果没有composer.lock
,则 install
命令和 update
没有区别,composer.lock
可以保证执行install
命令后,安装的依赖版本总相同,因此项目必须将 composer.lock
纳入代码仓库,库项目则不需要纳入.
update
命令用于更新项目里所有或者指定包的依赖。执行update
命令时, composer
会去读取、分析composer.json
中的依赖配置,然后去拉取符合条件的最新版本依赖,拉取到的依赖放在vendor
目录下,最后把所有拉取的依赖的精确版本号写入composer.lock
文件中。:
# 更新所有依赖
$ composer update
# 更新指定的包
$ composer update monolog/monolog
# 更新指定的多个包
$ composer update monolog/monolog symfony/dependency-injection
# 更新通配符匹配的包
$ composer update monolog/monolog symfony/*
注意:包能升级的版本受到版本约束的约束,包不会升级到超出约束的版本的范围。例如, composer.json 里包的版本约束为 ^1.10,而最新版本为 2.0。那么 update 命令是不能把包升级到 2.0 版本的,只能最高升级到 1.x 版本。对于开发版本的包,如果包作者上传了新的同版本开发包,那么执行update命令可以更新到最新的开发版本包。
用于检测已安装的包,哪些可以升级,此命令是 composer show -lo
的别名之一。
$ composer outdated
通过返回的着色,来标明每个包的状态:
如果希望高亮显示小的升级版本, 可以再加上--minor-only
或 -m
参数 :
$ composer outdated -m
remove 命令用于移除一个包及其依赖,前提是该包没有被其他包使用,如果依赖被其他包使用,则无法移除:
$ composer remove monolog/monolog
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 0 installs, 0 updates, 2 removals
- Removing psr/log (1.0.2)
- Removing monolog/monolog (1.23.0)
Generating autoload files
search 命令可以搜索包:
$ composer search monolog
该命令会输出包及其描述信息,如果只想输出包名可以使用 –only-name 参数:
$ composer search --only-name monolog
show 命令可以列出当前项目使用到包的信息,加上 --tree或者
-t 可以以依赖关系树的形式展示。
# 列出所有已经安装的包
$ composer show
# 可以通过通配符进行筛选
$ composer show monolog/*
# 显示具体某个包的信息
$ composer show monolog/monolog
# 查看依赖关系树
$ composer show -t
# 列出当前所有的依赖及其版本
$ composer show -i
命令结果示例
symfony/console v3.4.4 Symfony Console Component
symfony/debug v3.4.4 Symfony Debug Component
symfony/http-foundation v3.1.10 Symfony HttpFoundation Component
symfony/polyfill-mbstring v1.7.0 Symfony polyfill for the Mbstring extension
clearcache 可以清除本地的composer缓存信息:
# 列出所有已经安装的包
$ composer clearcache
why
是depends
命令的别名, ‘why’ 更容易记住,用于查询确定哪些依赖项需要给定包,可以使用--tree
或-t
标志在依赖树中查看此信息
$ composer why vlucas/phpdotenv
有时,一个或多个已安装的软件包将阻止安装或更新软件包。 为了检查是哪些安装包,可以使用 why-not
命令(别名为 prohibits
)。 例如使用 why-not
命令检查阻止更新 laravel/framework
包的包:
$ composer why-not laravel/framework 5.8
同样,可以使用 --tree
或 -t
标记在依赖关系树中查看此信息:
$ composer why-not laravel/framework 5.8 -t
查看安装的每个软件包的许可证。
$ composer licenses
组件从开发一直到正式发布,往往会经历好几个阶段,minimum-stability 表示本项目最低允许引入哪个阶段的组件,下面是minimum-stability的取值及对应阶段
取值 | 含义 |
---|---|
stable | 稳定正式版本 |
RC | 正式发布前的候选版本 |
beta | beta版本 |
alpha | alpha版本 |
dev | 开发阶段版本 |
项目名或者组件名,对于组件,组件名格式为 组织或者用户名/组件名
项目或者组件功能描述
type值为“library”表示为组件
组件开发人员姓名及邮件
如果是公司内部的非开源软件用 “proprietary”标识,开源软件,则需要按照需要选择合适的开源协议
依赖信息,包括依赖的扩展和组件包括版本约束在内的信息,下面是一个示例
"require": {
"php": ">=5.6.0",
"guzzlehttp/guzzle": "^6.2 || ^7.0"
},
通常版本应该遵循语义化版本号规范,可以按照实际需要,灵活设定自己组件、项目组件依赖约束。
1)指定版本
提供完整的版本号,表示下载此版本依赖
1.2.3
2)指定范围
通过 >、>=、<、<=、!= 等运算符指定范围,同时可以用“,” 表示 逻辑AND,“|”表示 逻辑OR,AND 优先级高于 OR
=1.0,<=1.2
3)通配符 *
1.2.* 匹配 1.2 的所有子版本
4)波浪号 ~
匹配 下一个重要版本。
~ 1.2 匹配 1.2 到 2.0 之间版本。
4)幂符号 ^
匹配 最新而不产生兼容性问题的版本。
5)一横符号 -
匹配区间。
5.2 - 5.4 匹配 5.2(包括)到 5.4(包括) 版本。
参考
https://blog.csdn.net/weixin_43908020/article/details/116802986
https://getcomposer.org/doc/06-config.md#data-dir
data-dir 目前仅用于存储老版本的composer,composer回滚时,从中获取之前安装的老版本的composer,进行安装
cache-dir 存储所有缓存文件
方法1,修改COMPOSER_HOME环境变量的值
COMPOSER_HOME 环境变量允许你改变 Composer 的主目录。这是一个隐藏的、所有项目共享的全局目录,也就是对本机的所有用户都可用。
由于cache-dir 的值默认为 $COMPOSER_HOME/cache,所以可以通过设COMPOSER_HOME 环境变量的值来修改缓存目录位置,方法如下
# vim ~/.bash_profile 增加下面一行,值设为你想要设置的目录即可
export COMPOSER_HOME=/expected/composer/home/directory
# 执行以下命令让环境变量生效
source ~/.bash_profile
方法2,修改COMPOSER_CACHE_DIR环境变量的值
COMPOSER_CACHE_DIR 环境变量允许你设置 Composer 的缓存目录
# vim ~/.bash_profile 增加下面一行,值设为你想要设置的目录即可
export COMPOSER_CACHE_DIR=/expected/composer/cache/directory
# 执行以下命令让环境变量生效
source ~/.bash_profile
方法3,修改cache-dir配置的值
更改配置-使用方法
# setting-key 是一个配置选项的名称,setting-value1 是一个配置的值。
# 可以使用数组作为配置的值,多个 setting-value 是允许的。
config [options] [setting-key] [setting-value1] ... [setting-valueN]
composer config -g cache-dir /expected/composer/cache/directory
https://getcomposer.org/doc/06-config.md#allow-plugins