答案是先验证包是否真实存在:访问https://packagist.org/packages/vendor/name确认页面可打开,再用composer search vendor/name和检查包名大小写、不可见字符;若存在则排查镜像失效、同步延迟、缓存残留或repositories配置错误。

“Package not found”不是网络问题,而是 Composer 根本没去对的地方找——90% 的 case 是镜像没生效、源被覆盖、或元数据缓存过期。
确认包是否真在 Packagist 上
别跳步骤,先手动验证包是否存在:打开 https://packagist.org/packages/vendor/name(把 vendor/name 换成你实际要装的),看是否返回 404。同时运行 composer search vendor/name,如果没结果,说明 Packagist 根本没收录这个包。注意:monolog/monolog 对,Monolog/monolog 或 monolog/Monolog 就错;spatie/laravel-backup 对,spatie/backup 就错。复制包名时小心从网页粘贴带入的零宽字符或全角空格,建议手动重打一遍。
检查当前生效的镜像源配置
Composer 2.2+ 必须用 repos.packagist(复数),写成 repo.packagist 会静默忽略。执行 composer config -g repos.packagist,输出应为完整 JSON,例如:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。URL 末尾必须带 /,否则 Composer 会拼出错误路径(如 packages.json)并 fallback 到官方源。若项目根目录存在 composer.json 且含 "repositories" 字段(哪怕只是空数组 []),它就会完全屏蔽全局镜像——此时要查 composer config repos.packagist(不加 -g)。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
强制刷新元数据缓存
composer clear-cache 不会强制重载远程 packages.json,因为 Composer 默认复用 15 分钟内未过期的本地元数据快照。真正有效的是:composer update --refresh,它会强制重新下载所有源的 packages.json。更彻底的做法是删掉缓存中对应镜像的子目录,比如:rm -rf ~/.composer/cache/repo/https---mirrors-aliyun-com-composer。再运行 composer update vendor/name -vvv,观察日志里是 Reading from cache 还是 Downloading https://... —— 后者才说明真在拉新数据。
私有包或自定义源报 404 怎么办
私有包不会出现在 Packagist,Composer 默认根本不查你的 GitLab 或本地路径。常见坑点:repositories 字段漏写 type 或 url,或者 type 写错(比如写成 vcs 却配了 HTTPS 镜像地址)。GitLab 私库必须写成:{"type":"vcs","url":"https://gitlab.example.com/mygroup/mylib.git"};GitHub 私有仓库需确保 auth.json 存在且权限正确,URL 里不能带 @username(否则认证被跳过)。分支名必须真实存在:"dev-main" 要求远程有 main 分支,"1.2.3" 要求有对应 Git tag,不能是 release-1.2.3 或 v1.2.3-final。
最易被忽略的一点:即使你改了全局镜像,只要项目 composer.json 里有 repositories 字段(哪怕只写了 {"packagist.org": false}),Composer 就会按该字段顺序查源,而不再读全局配置。这时候清缓存、换镜像、重装 Composer 全都没用——得先看清 composer config repos.packagist 输出,再决定是删项目级配置,还是补全它。

















