前言
作为最热门的php的扩展工具,composer在各个php框架基本都会用到,本文介绍一下实用常规操作。
composer的作用
Composer是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件。
初始化扩展包
先创建一个空目录,再在空目录里执行 Composer 自带的 init 命令,自动生成 Composer 的配置文件(composer.json)。
1 | $ mkdir composer_test |
请注意: Minimum Stability(官方说明) 要输入 dev,表明我们的扩展包最小稳定版的开发版。否则 Composer 的默认 Minimum Stability 是 stable,扩展包需要打上版本号才能被 Composer 认为是稳定版(stable),前期开发调试时简单点处理,设置为 dev,这样引入开发中的 Composer 扩展包时不需要去管什么版本号,等开发调试过了再说。
1 | Welcome to the Composer config generator |
包的环境要求和自动加载规范
环境要求通过 composer.json 里的 require 字段来限制。
自动加载规范通过 autoload 字段来定义。
现在假定需要 PHP 的版本大于等于 7.0.0,并且当前包的 src 目录下的文件以 Waq\ComposerTest 命令空间来加载,在 composer.json 中增加以下代码:
1 | "require": { |
如果需要引入其他的非 PSR-4 规范的源码文件,可能会需要用到 autoload 下的 file(官方说明) 字段,每一次请求 PHP 时都是包含这些文件。
例如要包含钉钉 SDK 的代码,可以在 composer.json 中增加以下代码:
1 | "autoload": { |
扩展包里创建类文件
src 目录下新建 Calc.php 文件,内容如下:
1 | <?php |
在项目中引入本地的扩展包
项目要引入本地目录的扩展包,先要在 composer.json 文件中加入以下内容:
1 | "repositories": [ |
然后在项目目录下执行 Composer 命令:
1 | composer require waq/composer_test:@dev |
或者
1 | composer require waq/composer_test:dev-master |
注意: 上面命令中的 waq/composer_test 就是 Composer 扩展包里 composer.json 的 name 字段值。@dev 或 dev-master 表示引入的扩展包是主分支的最新版,当还未将扩展包提交到 Github 仓库或者发布到 Packagist 上时,一般这样引入扩展包。
测试项目中引入的本地扩展包
新建测试 PHP 文件:
1 | <?php |
基本操作
composer install 安装依赖包,当你下载一个项目后,这或许是你改做的第一件事。
composer require/update 更新依赖包,我更喜欢用composer require。
composer remove 卸载依赖包
指定版本
update则无法在命令行传入新的版本号,需要先手动在composer.json中指定新的版本号,然后执行更新命令。但require可以直接在命令行传入版本号,例如:
1 | composer require hashids/hashids:2.0.0 |
升级
1 | composer require hashids/hashids:3.0.0 |
降级
1 | composer require hashids/hashids:2.0.4 |
符号
版本号范围大于/大于等于:>1.2.3 >=1.2.3
小于/小于等于:<1.2.3 <=1.2.3
确切的版本号:1.2.3
~1.2.3: 1.2.3 <= version < 1.3
^1.2.3: 1.2.3 <= version < 2.0
指定分支
更新
全局参数(常用)
- -v 表示正常输出。
- -vv 表示更详细的输出。
- -vvv 则是为了 debug。
- –help (-h): 显示帮助信息。
常见的坑
卡着不动
因为某些特殊情况,老外的源特别慢,我们就得把源改为国内的。阿里某个云。
1 | composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ |
添加-vvv选项
这样就知道compose这个家伙到底啥情况了。
1 | composer install -vvv |
提示不符合composer.json需要的版本,例如>=php7,但实际<php7也能正常运行,所以忽略
这样就可以正常运行了
1 | composer install --ignore-platform-reqs |
Warning from https://mirrors.aliyun.com/composer: Support for Composer 1 is deprecated and some packages will not be available. You should upgrade to Composer 2.
解决方法:
更新一下 composer 工具版本:
1 | composer self-update |
出现错误:
1 | The "https://getcomposer.org/versions" file could not be downloaded: SSL operation failed with code 1. |
具体解决流程:
1 | 问题: |
获取php.ini
1 | php -i | grep php.ini 或 php --ini |
获取cert地址
1 | php -r "print_r(openssl_get_cert_locations());" |
参考文章
composer指定php,composer 更新指定的依赖包
后续
如果后面有空的话,也可能继续写一篇创建自己的composer包。