因为composer默认只在install/update时解析一次path目录并锁定版本,改本地代码不自动重载;需显式执行composer dump-autoload -o刷新autoload映射,且确保本地包composer.json含合法name、version及正确psr-4配置。

为什么 path 仓库不自动重载本地代码?
因为 Composer 默认只在 composer install 或 composer update 时解析一次 path 指向的目录,之后就锁定该路径下的 composer.json 中声明的版本号——哪怕你改了本地源码,只要没重新 dump-autoload 或没触发自动加载刷新,vendor/autoload.php 就不会感知变化。
配置 path 仓库的正确写法
必须在项目根目录的 composer.json 中显式声明仓库类型为 path,且路径需为**相对于项目根目录的绝对路径或相对路径**(推荐用相对路径):
{
"repositories": [
{
"type": "path",
"url": "./packages/my-local-package"
}
],
"require": {
"my-vendor/my-local-package": "*"
}
}
注意:"*" 是关键——它告诉 Composer 接受该 path 下任意满足约束的版本(包括 dev-main、dev-master 或带 version 字段的任意值),否则会报 Could not find package ... in a version matching ...。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
-
url值不能以../开头(Composer 8.2+ 已禁止,会直接忽略该仓库) - 本地包的
composer.json必须有"name"和"version"(或使用"minimum-stability": "dev"+ 分支别名) - 若本地包无
"version",建议加"branch-alias": {"dev-main": "1.0.x-dev"}避免版本解析失败
改了本地包代码却没生效?三步检查
不是缓存问题,是自动加载和依赖映射没更新:
- 运行
composer dump-autoload -o:强制重建vendor/composer/autoload_*.php,确保新类/修改后的命名空间被收录 - 确认本地包的
autoload配置(如"psr-4")指向的是其自身源码目录,而非vendor/下的副本(path模式下 Composer 不复制文件,而是软链接或直接引用) - 执行
composer show my-vendor/my-local-package,检查输出中source行是否显示path类型及正确路径;如果显示dist,说明仓库未生效,可能因url路径错误或包名不匹配
开发时高频操作:避免反复 update
composer update my-vendor/my-local-package 会强制重新解析 path 并更新 vendor/ 中的符号链接(Composer 2.2+ 默认行为),但没必要每次改都跑一遍。更轻量的做法是:
- 保持本地包目录结构稳定,只改源码和测试
- 用
composer dump-autoload -o刷新自动加载即可(前提是类名/命名空间没变) - 如果改了
composer.json中的autoload或extra字段,才需要composer update - 某些 IDE(如 PHPStorm)会缓存类定义,改完记得
Invalidate Caches and Restart
真正容易被忽略的是:当你把本地包从一个目录移到另一个目录,或者重命名了 url 路径,composer.lock 里仍存着旧路径的哈希——这时必须删掉 vendor/ 和 composer.lock,再 composer install,否则 path 仓库根本不会重新挂载。










