本地path依赖类找不到的根本原因是自动加载器未注册对应命名空间,需同时满足:正确配置repositories、本地包自身含有效autoload、且执行composer dump-autoload。

本地 path 依赖的自动加载不会自动生效,必须同时满足三个条件:正确声明 repositories、本地包自身含有效 autoload 配置、且执行过 composer dump-autoload。
为什么 composer require 成功了但类还是 Class not found
根本原因不是 Composer 没装上,而是自动加载器压根没注册那个命名空间。常见情况包括:
- 本地包的
composer.json里没写"autoload"段,或者写了但psr-4映射路径与实际类文件位置不一致(比如声明"MyLib": "src/",但类文件却在src/Utils/Helper.php,而命名空间却是MyLibTools) - 项目根目录改了
composer.json的repositories,但没运行composer dump-autoload—— 这一步只刷新自动加载映射,不触发重安装,但对本地 path 包必不可少 - 误以为
vendor/autoload.php是配置入口,手动往里加require_once,结果下次dump-autoload直接覆盖掉
path 仓库中本地包的 autoload 必须独立配置
项目根目录的 composer.json 只管自己代码的自动加载;每个 path 依赖包,都得在它自己的 composer.json 里配好 autoload。否则 Composer 不知道该把哪个命名空间映射到哪。
- 推荐用
psr-4,例如:"autoload": { "psr-4": { "MyCompany\Utils": "src/" } } -
src/路径是相对于该本地包根目录的,不是项目根目录 - 如果本地包含全局函数文件(如
functions.php),需用"files": ["functions.php"],路径同样相对包根目录 - 别漏掉反斜杠转义:PHP 命名空间里的
在 JSON 字符串中要写成\
执行顺序和关键命令不能跳步
从零开始接入一个本地 path 包,必须按这个顺序操作,缺一不可:
- 确认本地包目录(如
./packages/my-utils)下有合法composer.json,含正确name(如"mycompany/utils")、autoload和可识别的version(或已设"minimum-stability": "dev") - 在项目根目录
composer.json的根级加"repositories"数组:[{ "type": "path", "url": "./packages/my-utils" }] - 运行
composer require mycompany/utils:dev-main(版本必须和本地包内一致,不能写^1.0) - 运行
composer dump-autoload—— 注意:这是针对整个项目(含所有已安装包)刷新 autoload 映射,不是只刷本地包
最容易被忽略的是:本地包改了命名空间或移动了类文件后,只改自己包里的 composer.json 是不够的,必须回到项目根目录再跑一次 composer dump-autoload。Composer 不会监听子目录变更,这一步永远得手动触发。











