• 【学习笔记】项目进行过程中遇到有关composer的问题


    composer.json内容详解

    以项目中的composer.json为例,参考文档

    file

    • name:composer包名
    • type:包的类型,project和library两种
    • keywords:关键词,方便别人在安装时通过关键词检索(没试过,好像是找不到包会推荐关键词相关的包)
    • description:包描述
    • license:许可协议,如果包要发布出去的话可以加个
    • require:导入的包名,已经允许安装的版本号,语义化版本
    • require-dev:开发环境下导入的包名,已经允许安装的版本号,在composer install使用–no-dev参数后不会安装require-dev中的包
    • autoload:自动文件加载配置
    • autoload-dev:开发环境下自动加载配置,和require-dev类似,使用–no-dev参数后不会自动加载autoload-dev中的文件
    • minimum-stable:按稳定性过滤包的默认值,默认为stable。这里值为dev,因为require中有依赖下面这个包,如果该字段设置为statble,那么这个包将不会被安装。其次,该字段的值有很多,项目过程中没遇到过,这里不做讨论。

    file

    • prefer-stable:顾名思义,如果有stable安装包有限安装
    • extra:scripts 使用的任意扩展数据。项目过程中未使用,故不做讨论
    • repositories:定义包的仓库,比如说上面sonow/so-now-sdk包是在公司私有gitlab仓库中的,需要添加仓库源。其中type为预定义仓库类型,gitlab是其中一种。
    • scripts:通过执行composer 标签名执行脚本,比如上方执行composer analyse就会执行脚本进行phpstan代码风格审查

    composer.lock 和 composer.json区别

    composer.lock也放有包版本管理信息,但是composer.lock存放的是确切的版本信息,而composer.json是推荐的版本信息。

    执行composer install时,首先会到composer.lock查询版本信息,如果没有composer.lock,会通过composer.json生成composer.lock。

    所以需要把composer.json和composer.lock一并放到项目仓库中。

    常用命令

    composer init 初始化composer.json文件

    composer require xxx/xxx -W 导入依赖包,使用-W的目的是,Also update dependencies of the newly required packages, including those that are root requirements.(原文,chatgpt的解释是,会顺带更新composer.json中的require和require-dev,如果不使用-W,只会更新composer.lock)

    composer install 如果有composer.lock则安装composer.lock的依赖,没有就先根据composer.json生成composer.lock,再安装依赖。

    composer update 忽略 composer.lock 文件,并根据项目的 composer.json 文件中的依赖关系,检查依赖包的最新版本,并尝试更新到最新版本。

    composer dumpautoload -o 自动加载,-o会生成优化文件,优化文件里面装的是namespace到文件路径的映射。如果有优化文件,composer会优先从优化文件中读取,否则只能从文件系统中查找。

    其他命令如下:

    file

    使用composer require遇到的坑和解决方法

    • 报错:Use the option --with-all-dependencies (-W) to allow upgrades, downgrades and removals for packages currently locked to specific versions.

    这个原因好像是composer require没有更新composer.json导致的,需要加-W参数更新composer.json依赖。

    • 安装php扩展

    使用composer安装,一般包名是ext-{php扩展名},如下所示:

    file

    自动加载

    composer.json中定义autoload字段

    file

    • psr-4 表示命名空间符合psr-4规范的话,父命名空间App下的所有命名空间都会被自动加载,psr-4规范文档,使用phpstorm也会进行命名空间规范检查并生成修复建议。
    • “App\\”: app/ 表示命名空间为App所在的目录为当前运行目录下的app文件夹
    • files 其他自动加载的文件

    在命名空间正确的情况下,如果无法自动加载文件,需要使用composer dumpautoload -o命令。个人认为是优化文件没有更新导致新文件不能自动加载导致的。

    需要注意的是,在文件中需要正确导入autoload.php,否则不会自动加载文件。

    • 为什么hyperf中不用导入autoload.php文件也能做到自动加载?

    在 Hyperf 项目中,文件不需要手动导入 autoload.php 文件,是因为 Hyperf 框架已经自动为项目生成了一个优化过的自动加载器,可以自动加载项目中的类和文件,无需手动导入。

  • 相关阅读:
    Pod控制器
    java springboot+VUE OA企业办公自动化系统前后端分离开发mysql数据库web结构java编程计算机网页源码maven项目
    腾讯云4核8G12M服务器支持多少人在线?
    批量下载Landsat遥感影像的方法
    面向对象技术--面向对象的分析与设计方法
    重保特辑|筑牢第一道防线,云防火墙攻防演练最佳实践
    windows bat 批处理常用命令
    通俗易懂Java内存模型详解面试带例子
    计算机视觉项目实战-目标检测与识别
    直播带货小程序的前端开发技巧与工具
  • 原文地址:https://blog.csdn.net/Left_Zzzz/article/details/133813926