composer基础知识科普

一、composer入门

1、每次安装新的包文件,会更新/vendor/autoload.php文件
2、composer.lock与composer.json的关系
文件composer.lock会根据composer.json的内容自动生成,和composer.json在同一位置,即在安装完所有需要的包之后,Composer会在composer.lock文件中生成一张标准的包版本的文件,这将锁定所有包的版本。可以使用composer.lock (当然是和composer.json一起)来控制项目的版本。
composer.lock与composer.json的关系为,composer.json文件为包的元信息,composer.lock文件同样为包的元信息,但在composer.json文件中可以指定使用不明确的依赖包版本,如“>=1.0”,在composer.lock文件中的会是当前安装的版本。那么当使用Composer安装包时,它会优先从composer.lock文件读取依赖版本,再根据composer.json文件去获取依赖。这确保了该库的每个使用者都能得到相同的依赖版本。这对于团队开发来讲非常重要。

二、composer常用命令

image.png

1、composer install
当项目重新部署或者合并分支时,都需要执行composer install命令。如果当前项目根目录存在composer.lock文件,则会首先根据composer.lock文件指定的包版本从composer中下载相应的包,如果没有,则根据composer.json文件到composer中下载合适版本的包,并生成composer.lock文件。
2、composer update
如果直接执行composer update命令,后面不指定包名,则会更新项目依赖的所有包文件,因此当项目已经成型,composer update命令要慎用,不能随便执行,特别是生产环境!
当然,我们可以在composer update命令后面跟上包名称,这样子就只会更新指定的包,具体步骤是:先修改composer.json文件中,对应包(比如monolog/monolog)的版本号为1.25.0,然后执行composer update monolog/monolog,则会更新monolog/monolog包到1.25.0版本,其他包不会受到影响。
3、composer require
使用频率最高的命令。当我们要往项目中引入某个包的时候,要使用该命令。
该命令执行会更新composer.json文件,并下载相应包版本,同时也会更新composer.lock文件。这样一来,其他项目成员只要拿到composer.lock文件后,执composer install命令即可获取到相同的包。

三、composer命令执行流程

image.png

四、搭建php框架时,composer的基础用法

1、composer.json中autoload的classmap自动加载
在composer.json中的autoload中添加classmap后,需要执行composer dump-autoload命令才能真正生效,如下:

"autoload" : {
    "classmap" : [
        "app/controllers"
    ]
}

在项目根目录中执行composer dump-autoload命令后,app/controllers下的类,才会被自动加载。
2、composer.json中autoload的psr-4自动加载
当然,如果按照上面第1点的方式,每次创建一个控制器类,都需要执行composer dump-autoload命令才能生效,太麻烦,因此psr4就派上用场了:在composer.json中添加

"autoload" : {
    "psr-4" : [
       "controllers\\": "app/controllers/"
    ]
}

这样一来,只要执行一次composer dump-autoload后,在app/controllers/目录下任意添加新的控制器类,都会被自动加载
3、利用composer单个文件自动加载
在开发过程中,往往有些功能函数没必要形成一个类,这个时候我们往往需要一个工具函数,例如:

if (!function_exists('dd')){
    function dd(...$args){
        foreach ($args as $arg){
            var_dump($arg);
        }
        die();
    }
}

这个时候,我们在composer.json文件中添加自动加载,如下:

"autoload": {
    "files": [
      "app/Helpers/Helper.php"
    ]
  }

最后执行一次composer dump-autoload,app/Helpers/Helper.php文件即可在全局被自动加载了。

你可能感兴趣的:(composer基础知识科普)