composer使用笔记
安装
shell
wget https://mirrors.cloud.tencent.com/composer/composer.phar
mv composer.phar /usr/local/bin/composer
chmod a+x /usr/local/bin/composer
全局安装依赖可以使用composer global require phpunit/phpunit
更换源
首先要分清楚是局部换源还是全局换源
1、局部换源(仅对当前项目有效)
在当前项目下的composer.json中添加
json
{
"repositories": [
{
"type": "composer",
"url": "http://packages.example.com"
},
{
"type": "git",
"url": "https://git.url"
},
{
"type": "path",
"url": "D:/php/pacakge"
}
]
}
寻找包的过程是先从第一个源中寻找,如果找不到就从第二个源中寻找,这里可以配置多个composer资源库
2、全局换源
打开命令行
首先把默认的源给禁用掉
shell
composer config -g secure-http false
修改镜像源
shell
composer config -g repos.packagist composer https://mirrors.cloud.tencent.com/composer/ # 腾讯
更换为原来的源
shell
composer config -g repo.packagist composer https://repo.packagist.org
修改成功后可以先查看一下配置
shell
composer config -g -l
第二行repositories.packagist.org.url 如果是阿里的就代表成功
注意:
如果修改了全局的话 就不用再去项目下修改composer.json配置文件了
如果当前项目的composer.json已经配置过,那会是当前项目下指定的源
文章来源:composer更换源
常用命令
composer outdated
更新命令
shell
composer self-update --preview
shell
composer update -vvv
清除缓存命令
shell
composer clearcache
更新到composer2
shell
composer self-update --2
如果使用apt或者yum等方式安装可能需要其他方法具体见官方文档。
搜索扩展包
shell
composer search max/max
自动加载
我们在开发项目中会经常用到第三方的类库插件,但是如果每次需要使用的时候都会在代码的某一处去引入,然后在实例化,这样做感觉很不方便,那么怎么实现自动加载呢,下面简单介绍使用composer实现自动加载:
安装
安装地址(中国镜像): https://pkg.phpcomposer.com/#how-to-install-composer
根据它的说明一步一步进行安装
新建目录
新建一个目录,这个目录的名称是有要求的,当你看到有提示就说名你的命名不符合要求,该目录就是后面的项目目录!
初始化
打开命令行控制台cmd,进入工作目录,运行composer命令:composer init
之后会提示你输入一些包名,作者等信息,运行后会生成一个composer.json文件
Install
执行composer install 安装会给你安装依赖,当然你的项目刚建立是没有依赖的,所以他会给你安装composer包,composer包的结构如下:
-
vendor
-
composer
-
autoload_classmap.php
-
autoload_namespaces.php
-
autoload_psr4.php
-
autoload_real.php
-
autoload_static.php
ClassLoader.php
installed.json
LICENSE-
autoload.php
-
composer.json
-
-
在你的项目中引入autoload.php就可以进行自动加载了。
你可能需要手动修改/添加一些东西
自动加载
配置
打开composer.json文件:
共有四种方式:
- PSR-0(不推荐使用);
- PSR-4;
- Class-map;
- Files;
下面演示PSR-4实现自动加载:
json
"autoload": {
"psr-4": {
"app\\": "../application"
}
其中app\表示../application 目录下的类的命名空间是app
命名空间
新建src目录,在目录下创建IndexController.php,php文件内容如下:
//设置命名空间
namespace src;
class IndexController
{
public function index()
{
echo 'indexController';
}
}
创建类
在work根目录创建index.php:
//引入vendor下的autoloas.php
require 'vendor/autoload.php';
//实例化对象
$index = new src\\IndexController();
//调用类中的方法
$index->index();
运行后会出现报错:
class IndexController not fund
打开控制台,进入到work文件目录,运行composer命令:
composer dump-autoload
在运行work下的index.php,不报错误信息说明已经成功实现自动加载了。
使用
在work下的index.php文件中我们实例化IndexController类的时,格式为new src\IndexController();;
如果命名空间较长的情况下,看起来不太方便,那我们可以用use来引入关键字,修改index.php代码如下:
use src\IndexController;
//引入vendor下的autoloas.php
require 'vendor/autoload.php';
//修改后的实例化
$index = new IndexController();
//调用类中的方法
$index->index();
在运行index.php结果和上面一样。
**注意:**在配置完composer.json以后一定要运行composer dump-autoload [-o] 不然会出现class not fund;
#踩坑
已经安装composer,写好composer.bat,并且设置好了path,在cmd下可以正常使用,但是在git-bash里面不行,显示如下提示:
bash: composer: command not found
原因很可能是composer文件没有可执行权限,git-bash是以linux shell方式运行的,linux和windows文件权限管理方式不太一样。切换到composer文件所在目录,执行如下命令修复权限:
shell
chmod 755 composer.bat
可是我发现上面的命令没有效果,这就尴尬了
其实真正的原因是,git-bash 不识别 composer.bat 文件,需要新建一个 composer 文件,输入如下内容:
shell
#!/usr/bin/env sh
# php /path/to/composer.phar $*
php `dirname $0`/composer.phar $*
#!/usr/bin/env sh 有个这一行,git-bash 会自动识别为可执行文件,不需要也不能使用 chmod 命令修改权限。
忽略平台要求
composer install --ignore-platform-reqs
指定php版本运行composer
php /usr/bin/composer create-project max/max .
这里composer需要是完整路径。
不安装插件
shell
composer install --no-plugins
静默安装
shell
composer install -q
文档
版本约束
通配符
可以使用通配符来设置版本。1.0.*相当于>=1.0 =1.2 =1.2.3 需要注意的是,如果作用在主版本号上,例如1,按照上面的说法,Composer可以安装版本1以后的主版本,但是事实上是1会被当作1.0对待,只能增加小版本,不能增加主版本。
折音号 ^
^操作符的行为跟Semantic Versioning有比较大的关联,它允许升级版本到安全的版本。例如,^1.2.3相当于>=1.2.3 =0.3.0 > != | > 6.0, 6.0.* 代表版本范围 [6.0, 6.1) |
| 赋值运算符(最低版本) ~ | 1.2,6.1.0 | ~1.2 代表版本范围 [1.2, 2.0) ~6.1.0 代表版本范围 [6.1.0, 6.2) |
| 脱字号版本(最低版本) ^ | ^1.2.3 | ^1.2.3 代表版本范围 [1.2.3, 2.0.0) |
约束 内部约束
1.2.3 =1.2.3.0-stable
>1.2 >1.2.0.0-stable
>=1.2 >=1.2.0.0-dev
>=1.2-stable >=1.2.0.0-stable
=1.0.0.0-dev =1.3.0.0-dev =1.4.0.0-dev 版本测试: https://semver.madewithlove.com/ ,地址可能会变更,可以参考composer官方文档
composer show --tree
composer why