还原默认源后,composer config -g repo.packagist 输出必须是完整 json(如 {"type":"composer","url":"https://packagist.org/"}),缺引号、漏 type、url 无结尾 / 或非 https 均导致静默回退官方源且不报错。

composer config -g repo.packagist 输出必须是完整 JSON
还原默认源后,composer config -g repo.packagist 的输出必须是形如 {"type":"composer","url":"https://packagist.org/"} 的合法 JSON —— 缺少双引号、漏掉 type 字段、URL 少末尾 / 或协议写成 http,都会导致静默 fallback 到官方源,且命令不报错。
常见错误输出:
-
null或空行 → 键名拼错(比如写成repos.packagist) -
"https://packagist.org"(纯字符串)→ 缺type,降级为 legacy 格式,实际未生效 -
{"type":"composer","url":"https://packagist.org"}(无结尾/)→ Composer 2.2+ 会拼出错误路径,请求 404 后自动切回默认行为
composer diagnose 看 Repo packagist.org 行
composer diagnose 是比 config -g 更贴近运行时的验证方式。重点看这一行:
Repo packagist.org: https://packagist.org/
它反映的是 Composer 解析依赖时**真正准备连接的目标地址**。如果这里还是镜像地址,说明还原没成功;如果显示 https://packagist.org/,但 config -g 已输出正确 JSON,则大概率是项目级配置或环境变量覆盖了全局设置。
检查干扰项:
- 进项目目录执行
composer config repo.packagist,有输出就说明项目composer.json里定义了repositories字段 - 运行
env | grep COMPOSER_REPO_PACKAGIST(Linux/macOS)或echo %COMPOSER_REPO_PACKAGIST%(Windows),有值就得先 unset/clear
composer require -vvv 日志里得出现 packagist.org
最终验证必须落到真实网络请求上。执行:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
composer clear-cache && composer require monolog/monolog --no-install -vvv 2>&1 | grep "GET https"
关键看日志中是否出现:
-
GET https://repo.packagist.org/packages.json✅(注意是repo.packagist.org,不是packagist.org) -
GET https://packagist.org/packages.json❌(旧版 Composer 才用这个,说明配置被忽略) - 大量
mirrors.aliyun.com或其他镜像域名 ❌(还原失败)
若看到镜像域名,别急着下结论——先确认是否因缓存未清,或项目 composer.json 里写了 "repositories" 覆盖了全局。
Windows 和 Docker 场景下容易漏掉的点
Windows 用户改完配置后,必须关掉所有终端(CMD/PowerShell/WSL),新开一个再验证;否则旧进程仍读取旧配置。Docker 多阶段构建中,RUN composer config -g 默认写入 /root/.composer/config.json,但 final 阶段若以 www-data 用户运行,它不会去读 /root/ 下的文件。
安全做法:
- Docker:用
RUN su www-data -c "composer config -g repo.packagist composer https://packagist.org/" - Alpine 基础镜像:补
RUN apk add --no-cache ca-certificates,否则 HTTPS 请求直接失败 - CI 脚本:不要依赖
--repository-url参数,它在create-project中不生效,必须提前配好全局 config
最常被忽略的不是“怎么还原”,而是“谁在读、读哪里”——尤其是项目根目录下那个看似无关的 composer.json,只要它含 repositories 字段,全局配置就彻底失效。










