必须配国内镜像源,否则composer install卡在Loading composer repositories或Downloading是常态;正确命令为composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,需验证输出为完整JSON且URL末尾带斜杠,再清缓存、删vendor和lock后用-vvv确认真实请求地址。

composer install 卡在 Loading composer repositories 或 Downloading 阶段,不是网速问题,是默认直连 packagist.org 在国内基本不可用——TLS 握手慢、首字节延迟高、DNS 解析不稳定,换对镜像源才能真正“飞起来”。
composer config -g repo.packagist 命令必须写对这三处
这条命令静默失败率极高,不报错但完全不生效,90% 的人卡在这一步:• repo.packagist 不能写成 repos.packagist(多一个 s 就被忽略)
• 中间那个 composer 是 type 值,不是注释,漏掉就 fallback 回官方源
• URL 必须是 HTTPS + 末尾带 /:https://mirrors.aliyun.com/composer/ ✅,https://mirrors.aliyun.com/composer ❌(少斜杠会拼出 /composerpackages.json 导致 404)
唯一正确命令:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
验证是否写入:执行 composer config -g repo.packagist,输出必须是完整 JSON:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。空、null 或只返回 URL 字符串,说明没配成功。
宝塔 / CI / Docker 里镜像还是慢?查执行用户
你在终端用 root 配了全局镜像,但宝塔部署走的是 www 用户,GitHub Actions 默认用 runner 用户,Docker 构建用的是自定义 UID —— 它们读的不是同一个 ~/.composer/config.json。
• 查当前执行用户:whoami 或看宝塔任务日志里的 UID
• 给 www 用户单独配:sudo -u www composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
• CI 脚本中别混用 sudo 和普通用户,确保 composer config -g 和后续 composer install 是同一用户执行
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
换镜像后仍卡住?清缓存 + 删 lock + 重生成
Composer 会优先读 composer.lock 里记录的旧 dist URL 和本地缓存,哪怕镜像已生效,它仍会先试一次原始地址。
• 运行 composer clear-cache
• 删除项目下的 vendor/ 和 composer.lock
• 再执行 composer install -vvv,盯紧日志里是否出现 GET https://mirrors.aliyun.com/composer/ —— 这才是真实走镜像
• 如果已有 composer.lock,可跳过删 lock,改用 composer update --lock 强制刷新所有包的 dist.url
项目级配置怎么安全追加不覆盖私有源
全局配置在团队协作和 CI 中容易失效,项目级配置更可靠,但手动编辑 composer.json 容易出错:
• 进项目根目录,运行 composer config repo.packagist composer https://mirrors.tuna.tsinghua.edu.cn/composer/(不加 -g)
• 它会自动向 repositories 字段追加 packagist 条目,前提是原 repositories 是对象(如 "repositories": {}),不是数组("repositories": [])
• 若已是数组,命令会失败;需先手动改成对象再运行
• 切记删掉 "packagist.org": false 这类禁用语句,否则镜像配置被彻底屏蔽
composer.lock 里残留的旧 URL、不同用户间的配置隔离、以及 repositories 结构被破坏后无法自动合并——这些地方一错,换再快的镜像也白搭。

















