composer 命令及 composer.json

本文总结了composer提供的常用命令及composer.json结构解析

composer 命令

1、config 命令

查看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/

2、selfupdate 命令

升级composer到最新版本

$ composer selfupdate 
# 以下命令含义相同
$ composer self-update

3、create-project 命令

使用 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

4、require 命令

安装一个或多个依赖,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"
   },

5、install 命令

如果执行install命令所在目录存在composer.lock文件,则以composer.lock为标准去下载依赖,如果没有composer.lock,则 install 命令和 update没有区别,composer.lock可以保证执行install命令后,安装的依赖版本总相同,因此项目必须将 composer.lock 纳入代码仓库,库项目则不需要纳入.

6、update 命令

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命令可以更新到最新的开发版本包。

7、outdated

用于检测已安装的包,哪些可以升级,此命令是 composer show -lo 的别名之一。

$ composer outdated

通过返回的着色,来标明每个包的状态:

  • Green: 当前安装包已是最新版本
  • Yellow: 有可升级的更新, 但可能有不兼容的修改。
  • Red: 有可用的小版本升级 (一般是bug修复)

如果希望高亮显示小的升级版本, 可以再加上--minor-only-m 参数 :

$ composer outdated -m

8、remove 命令

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

9、search 命令

search 命令可以搜索包:

$ composer search monolog

该命令会输出包及其描述信息,如果只想输出包名可以使用 –only-name 参数:

$ composer search --only-name monolog

10、show 命令

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

11、clearcache命令

clearcache 可以清除本地的composer缓存信息:

# 列出所有已经安装的包
$ composer clearcache

12、why|depends命令

whydepends命令的别名, ‘why’ 更容易记住,用于查询确定哪些依赖项需要给定包,可以使用--tree-t标志在依赖树中查看此信息

$ composer why vlucas/phpdotenv

13、why-not|prohibits命令

有时,一个或多个已安装的软件包将阻止安装或更新软件包。 为了检查是哪些安装包,可以使用 why-not 命令(别名为 prohibits)。 例如使用 why-not 命令检查阻止更新 laravel/framework 包的包:

$ composer why-not laravel/framework 5.8

同样,可以使用 --tree-t 标记在依赖关系树中查看此信息:

$ composer why-not laravel/framework 5.8 -t

14、licenses命令

查看安装的每个软件包的许可证。

$ composer licenses

二、composer.json

minimum-stability

组件从开发一直到正式发布,往往会经历好几个阶段,minimum-stability 表示本项目最低允许引入哪个阶段的组件,下面是minimum-stability的取值及对应阶段

取值 含义
stable 稳定正式版本
RC 正式发布前的候选版本
beta beta版本
alpha alpha版本
dev 开发阶段版本

name,

项目名或者组件名,对于组件,组件名格式为 组织或者用户名/组件名

description

项目或者组件功能描述

type

type值为“library”表示为组件

authors

组件开发人员姓名及邮件

license

如果是公司内部的非开源软件用 “proprietary”标识,开源软件,则需要按照需要选择合适的开源协议

require,

依赖信息,包括依赖的扩展和组件包括版本约束在内的信息,下面是一个示例

  "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

repositories

extra

三、实战

3.1 cache-dir 和 data-dir区别

https://getcomposer.org/doc/06-config.md#data-dir
data-dir 目前仅用于存储老版本的composer,composer回滚时,从中获取之前安装的老版本的composer,进行安装

cache-dir 存储所有缓存文件

3.2 怎么设置composer缓存目录

方法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

3.3 下载composer可执行文件安装

3.4 allow-plugins

https://getcomposer.org/doc/06-config.md#allow-plugins

你可能感兴趣的:(PHP,php)