composer path仓库必须显式声明在根composer.json的repositories数组中,否则不会扫描packages/目录;url支持"packages/*"通配符且须为相对路径,子包name与require必须完全一致,autoload需严格匹配命名空间和路径。

Composer monorepo 中 path 仓库必须显式声明在根 composer.json
不声明 repositories,Composer 就根本不会去扫描 packages/ 下的本地目录——哪怕结构再标准,composer install 也只会当它不存在。这是 Class not found 的最常见源头。
正确写法是在 monorepo 根目录的 composer.json 中加入:
"repositories": [
{
"type": "path",
"url": "packages/*"
}
],
"minimum-stability": "dev",
"prefer-stable": true
注意:url 值必须是相对路径,且支持通配符;不能写成 ./packages/* 或绝对路径;packages/ 目录必须存在(哪怕为空),否则 Composer 会静默忽略该仓库。
Laravel 应用里 require 的包名必须和子包 name 完全一致
Composer 不靠目录名识别包,只认子包 composer.json 里的 name 字段。比如子包 packages/core/composer.json 写了 "name": "acme/core",那 Laravel 应用的 composer.json 中就必须写:
"require": {
"acme/core": "^1.0"
}
常见错误包括:
- 拼错大小写,如写成
Acme/Core或acme/core-dev - 误用目录名,如写成
"core": "^1.0" - 子包未定义
name,导致 Composer 认为它是“匿名包”,无法被引用
autoload 配置必须覆盖子包实际命名空间与路径
即使 path 仓库生效、包名匹配,如果子包没配 autoload,Laravel 的自动加载器依然找不到类。PSR-4 映射必须严格对齐源码结构。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
例如子包 packages/core/src/Helper.php 中类为 AcmeCoreHelper,则其 composer.json 必须含:
"autoload": {
"psr-4": {
"Acme\Core\": "src/"
}
}
关键细节:
- Windows 下反斜杠要双写(
\),否则 JSON 解析失败 - 路径末尾不加
/,写成"src/"而非"src"或"src/"多余斜杠 - 执行
composer dump-autoload必须在 Laravel 应用目录下运行,不是根目录
修改本地子包代码后,Laravel 不感知?别等 composer update
composer update 不会重新拉取 path 类型包的本地变更——它只按 composer.lock 锁定的版本安装。改了 packages/core 的源码,Laravel 默认还是用旧的 autoload 映射。
真正有效的做法只有两个:
- 在 Laravel 应用目录下运行
composer dump-autoload(最快,仅刷新自动加载) - 删掉
vendor/和composer.lock,再跑composer install(彻底重建,适合结构变动大时)
别在根目录运行这些命令:vendor 生成位置错,autoload 映射失效,问题反而更难排查。










