composer使用笔记

2023/3/6·2 views

安装

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文件:
共有四种方式:

  1. PSR-0(不推荐使用);
  2. PSR-4;
  3. Class-map;
  4. 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

文档

https://docs.phpcomposer.com/

版本约束

通配符

可以使用通配符来设置版本。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