pear

  • pear: 全称为PHP扩展与应用库(PHP Extension and Application Repository)。为了创建一个类似于Perl CPAN档案的工具
  • phar: php档案包

Composer

  1. 概念:用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件。Composer 是多平台的,我们努力使它在 Windows 、 Linux 以及 OSX 平台上运行的同样出色。
  2. composer扩展包平台: https://packagist.org/
  3. ~和^的意思很接近,在x.y的情况下是一样的都是代表x.y <= 版本号 < (x+1).0,但是在版本号是x.y.z的情况下有区别,举个例子吧:

    ~1.2.3 代表 1.2.3 <= 版本号 < 1.3.0

    ^1.2.3 代表 1.2.3 <= 版本号 < 2.0.0

基本命令

  • composer show encore/laravel-admin // 查看当前版本

  • composer self-update // composer 升级

  • composer config -gl -> composer查看全局设置

  • composer config -g repo.packagist composer https://mirrors.aliyun.com/composer -> 更换 composer 源

  • composer install -> 如有 composer.lock 文件,直接安装,否则从 composer.json 安装最新扩展包和依赖;

  • composer install –ignore-platform-reqs -> 忽略警告等信息

  • composer require “new/package:version” -> 添加安装 new/package, 可以指定版本,如: composer require new/package ~2.5. 流程

  • php -d memory_limit=-1 /usr/local/bin/composer require -> 解决内存耗尽问题,保证安装成功

    composer require “summerblue/generator:~1.0” –dev -> 后置参数 –dev 表明我们只在开发环境中使用

    1
    2
    3
    4
    5
    6
    7
    
    // 安装包
    composer require hashids/hashids:2.0.0
    // 已安装 升级
    composer require hashids/hashids:3.0.0
    // 已安装 降级
    composer remove hashids/hashids
    composer require hashids/hashids:2.0.4
    
  • 接下来介绍几个日常生产的流程,来方便加深我们的理解

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    > 流程一:新项目流程
    > - 创建 composer.json,并添加依赖到的扩展包;
    > - 运行 composer install,安装扩展包并生成composer.lock;
    > - 执行额外命令:php artisan ide-helper:generate 等
    > - 提交 composer.lock 到代码版本控制器中,如:git;
    >
    > 流程二:新人接手安装现有项目的扩展
    > - 克隆项目后,根目录下直接运行 composer install 从composer.lock 中安装 指定版本 的扩展包以及其依赖;
    > - 执行额外命令:php artisan ide-helper:generate 等
    > - 此流程同样适用于生产环境代码的部署。
    >
    > 流程三:为项目添加新扩展包
    > - 使用 composer require "new/package:version" 添加扩展包;
    > - 提交更新后的 composer.json 和 composer.lock 到代码版本控制器中,如:git;
    
  • composer remove some/package -> 删除已安装的扩展

  • composer update –no-plugins -> 扩展升级更新

  • composer dump-autoload # 重新加载 composer.json 的自动加载模块,更新 autoload_static.php 等文件

  • 实现全局辅助函数:打开根目录下的composer.json,找到加载配置项autoload,新增以下代码:

    1
    2
    3
    
    "files":[
        "app/helpers.php"
    ]
    

require-dev 和 require

require-dev和require、autoload-dev和autoload使用方式一致,用途不同。

  • require列出的软件包列表必须安装,都为正式部署所需要;
  • require-dev列出的软件包一般用于开发或测试,是额外列出的依赖;
  • 执行composer install/update命令时用–no-dev参数跳过require-dev列出的软件包;

autoload-dev 和 autoload

  • autoload自动加载映射,正式部署使用;
  • autoload-dev自动加载映射,一般多用于测试和开发;
  • 执行composer dump-autoload命令式可通过–no-dev参数来忽略autoload-dev指定的命名空间;

常用 composer 扩展包

  • 常见的 Token 是存储在数据库中的,在服务器端进行数据库查询,并比对 Token 是否合法。JWT 的意义是让 Token 和 Payload 加密后存储于用户端,服务端只需要解密即可,不需要查库即可获得类似存储于 Session 的数据(Payload),并且可信赖。

通常引入的 package 有这么些特征

不要随意引入过多的 package,简单的功能自己写即可。

  1. 通用类库,比如 jwt 、predis
  2. 非常复杂的功能,比如 oauth(即 Laravel 的 passport)
  3. 各种 sdk,比如 easywechat
  4. 辅助开发的包,如 laravel-ide-helper、tinker