必须用path仓库类型声明本地包源,不能手动复制进vendor;需在主项目composer.json的repositories数组中配置{"type":"path","url":"./packages/my-utils"},且本地包要有合法composer.json(含匹配的name和dev-main)、已git init并commit,require时写"acme/my-utils":"dev-main",再执行composer dump-autoload。

本地开发包必须用 path 仓库类型,不能靠复制进 vendor
手动把包扔进 vendor/ 目录,composer install 会直接清掉它;即使侥幸保留,也不会触发 autoload 注册。Composer 加载本地开发包的唯一合规路径是声明 path 类型仓库——它让 Composer 把指定目录当作一个“源”,而不是待安装的产物。
-
repositories必须写在项目根composer.json的顶层,格式为数组:[{ "type": "path", "url": "./packages/my-utils" }] -
url只能是相对路径(推荐)或绝对路径,禁用file://、~/、$HOME等形式;Windows 下统一用/分隔符更稳妥 - 目标目录下必须存在合法的
composer.json,且含完整name(如"acme/my-utils")和可识别的version(建议"dev-main") - 该目录需已执行
git init并至少有一个 commit,否则 Composer 拒绝扫描
require 时必须写 dev-分支名,不是版本号也不是 *
Path 仓库下的包不走语义化版本解析,Composer 只认当前 Git HEAD 所在分支名。如果你本地包在 main 分支,但 require 写的是 "acme/my-utils": "^1.0" 或 "*",就会报 Could not find a matching version of package——它根本不会去匹配,而是直接跳过。
- 显式写
"acme/my-utils": "dev-main"(或"dev-develop"),大小写必须与实际分支名完全一致 - 不要省略
dev-前缀;dev-main和main是两个不同标识 - 如果改了分支,记得同步更新
require字段,或运行composer update acme/my-utils单独刷新
类找不到?90% 是 autoload 没配对或没重生成
包装进 vendor/ ≠ 类能自动加载。Composer 只根据包自身 composer.json 中的 autoload 段生成映射文件,且只在 dump-autoload 时写入 vendor/composer/autoload_psr4.php。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 本地包的
composer.json必须有autoload,例如:"psr-4": {"Acme\Utils\": "src/"};files字段不能替代 PSR-4/PSR-0 -
psr-4的路径是相对于该包根目录的,不是主项目——别写成"src/Acme/Utils/" - 改完本地包的
autoload后,必须在主项目中运行composer dump-autoload,否则新命名空间不会生效 - 若包提供 Laravel Service Provider,仍需手动在
config/app.php中注册,Composer 不处理这部分
为什么 composer require 总报 “Could not find package”
这不是网络或缓存问题,而是识别链断裂:Composer 根本没把你的本地目录当包看。最常漏掉的三个硬性条件:
- 项目
composer.json里没写repositories,或写错位置(塞进config、extra、require里都无效) - 本地包
composer.json缺name,或格式不对(如写成"my-utils"而非"acme/my-utils") - 没关掉 packagist.org:只要没加
"packagist.org": false到项目composer.json根层级,Composer 就永远先查官方源,你的 path 源永远不会被命中
真正麻烦的点往往藏在细节里:比如 Windows 下符号链接行为异常、Git 分支名大小写混用、auth.json 权限不对导致 fallback 失败——这些都不会报明确错误,只会静默跳过。










