必须用path类型仓库,因其强制符号链接或目录映射、跳过版本校验,确保autoload实时生效;其他方式(如require @dev、手动拷贝)均无法使本地代码修改即时反映且易导致类加载失败。

必须用 repositories 声明 path 类型仓库,其他方式(拷贝、软链手动建、require dev 分支)都会导致 autoload 失效或修改不生效。
为什么 composer require vendor/package:@dev 不会走本地目录
Composer 默认只从 Packagist 或你显式声明的仓库里找包。@dev 是稳定性标记,不是路径指令——它仍会尝试解析 Git 仓库或 dist ZIP,完全忽略你本地的代码目录。
- 除非你在
repositories里写了{"type":"path","url":"../my-package"},否则 Composer 根本“看不见”那个文件夹 - 项目级
composer.json的repositories必须是根级数组,不能嵌在require或config下 - 如果
url是绝对路径(如/home/user/my-package),Linux/macOS 下会静默跳过;Windows 必须带盘符(C:/dev/my-package)才可能生效
path 仓库生效的三个硬性条件
缺一不可,任一不满足都会报 Could not find package,且无明确提示。
- 本地包根目录下必须有合法
composer.json,其中name字段(如"acme/utils")和你在主项目中require的字符串**完全一致**(大小写、连字符、斜杠全部敏感) - 本地包目录必须已运行
git init并至少有一次commit,否则 Composer 拒绝识别该路径 - 主项目
composer.json中require的版本约束必须匹配本地包的“分支名”,例如写"acme/utils": "dev-main",而不是"1.0.0"或"*"(除非你显式设了"minimum-stability": "dev")
装上了但 Class not found 怎么办
这不是网络或路径问题,而是 autoload 链路没接上。Composer 只管链接目录,不自动注册命名空间。
- 确认本地包的
composer.json里有正确的autoload配置,例如:"psr-4": {"Acme\Utils\": "src/"} - 运行
composer dump-autoload(开发阶段不用加-o),否则新映射不会写入vendor/composer/autoload_psr4.php - 如果本地包含测试类,且用了
autoload-dev,记得加--dev参数:composer dump-autoload --dev - 执行
php -r "echo class_exists('Acme\Utils\Helper') ? 'ok' : 'fail';"验证,别只看vendor/目录有没有文件夹
最容易被忽略的是:Windows 下 path 仓库默认是复制行为,改本地代码不会实时反映;要启用符号链接得加 "options": {"symlink": true},且需管理员权限或开启开发者模式。生产部署前务必删掉整个 repositories 块——它在离线服务器上只会让 composer install 立刻失败,不会 fallback。











