答案:“Could not find package”主因是本地缓存未刷新、项目级repositories覆盖全局镜像、或根本未触发镜像请求;应通过curl验证镜像同步状态、精准删除对应缓存子目录(如https---mirrors-aliyun-com-composer)、并检查项目composer.json中repositories字段是否静默禁用镜像。

“Could not find package”在中文镜像下几乎从不因为镜像本身缺包,而是本地缓存没更新、项目级配置覆盖了镜像、或根本没走到镜像请求那步。
确认是不是真没同步,别信 composer show
composer show vendor/package 报 no matching package found,不代表镜像没这个包——它只读本地 packages.json 和 provider-vendor-package.json 缓存,不发 HTTP 请求。
- 手动 curl 镜像地址验证:运行
curl -I https://mirrors.aliyun.com/composer/p/vendor/package.json,看是否返回HTTP/2 200和较新的Last-Modified - 同时打开
https://packagist.org/packages/vendor/package确认官网已发布 - 如果镜像返回 404 或时间滞后 >30 分钟,就是同步延迟,等或换源
删错缓存目录 = 白忙活
composer clear-cache 清的是 ZIP 包和部分元数据,但不会强制刷新 packages.json——Composer 默认复用 15 分钟内未过期的缓存快照。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 真正要删的是镜像对应的 provider 缓存子目录:
rm -rf ~/.composer/cache/repo/https---mirrors-aliyun-com-composer(Windows 路径为%APPDATA%\Composer\cache\repo\https---mirrors-aliyun-com-composer) - 删完立刻跑
composer update --dry-run -v,日志里出现Downloading https://...才算生效 - 别删整个
~/.composer/cache,否则下次装包又要重下所有 dist
项目级 repositories 字段静默接管全局配置
只要项目 composer.json 里有 "repositories" 字段(哪怕只是空数组 []),全局镜像配置(composer config -g repos.packagist)就完全失效。
- 运行
composer config --list | grep repositories,如果输出非空,说明项目级配置已生效 - 检查
repositories是对象还是数组:写成{"packagist.org": false}是对的;写成"packagist.org": false(没包在数组里)会被忽略 - 私有源必须放
repositories数组前面,且{"packagist.org": false}必须单独作为最后一项 - 如果用了
"type": "vcs"却配了 Satis 地址,Composer 会尝试git cloneHTML 页面,直接报错
子模块和私有包根本没进 Composer 的查找流程
Git 子模块内容为空、子模块里没有合法 composer.json、或私有包没在任一 repositories 条目中显式声明——这些情况,Composer 根本不会去查镜像,连 packages.json 都不请求。
- 执行
git submodule status:输出含-开头或无输出,说明未初始化;补上git submodule update --init --recursive - 进入子模块目录,确认存在
composer.json且含name和autoload - 私有包名必须和
repositories中某条目的name字段**完全一致**(大小写敏感),不能靠通配符myorg/*匹配 - 子模块不继承父项目的镜像配置;若需统一源,得在子模块自己的
composer.json里写repositories
最常被跳过的环节是:没确认 git submodule 是否检出,或删了缓存却没删对目录。一旦缓存路径或子模块状态不对,后续所有排查都是在原地打转。

















