以项目中的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会优先从优化文件中读取,否则只能从文件系统中查找。
其他命令如下:
这个原因好像是composer require没有更新composer.json导致的,需要加-W参数更新composer.json依赖。
使用composer安装,一般包名是ext-{php扩展名},如下所示:
composer.json中定义autoload字段
在命名空间正确的情况下,如果无法自动加载文件,需要使用composer dumpautoload -o
命令。个人认为是优化文件没有更新导致新文件不能自动加载导致的。
需要注意的是,在文件中需要正确导入autoload.php,否则不会自动加载文件。
在 Hyperf 项目中,文件不需要手动导入 autoload.php 文件,是因为 Hyperf 框架已经自动为项目生成了一个优化过的自动加载器,可以自动加载项目中的类和文件,无需手动导入。