必须同时满足四要素才生效:-g全局写入、repo.packagist单数键名、composer强制type值、HTTPS且末尾带/的URL;任一缺失即静默回退官方源,验证需输出完整JSON对象。

直接改全局配置就行,命令只有一条,但不加 --global 或写错 URL 格式就等于白干。
用 composer config -g repo.packagist 覆盖默认源
这条命令会修改用户级 config.json 中的 repo.packagist 字段,所有项目(除非显式覆盖)都会走你设的镜像:
composer config -g repo.packagist '{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}'
- URL 必须带
https://,写成http://或漏掉协议会导致后续require失败 - 引号和 JSON 结构必须合法:双引号、逗号不能多也不能少,否则 Composer 会静默忽略整段配置
- 不用进任何项目目录,执行一次,全局生效
为什么改了却还在访问 packagist.org?
常见原因不是命令没跑,而是配置被更高优先级或错误格式屏蔽了:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 项目根目录存在
composer.json,且里面定义了"repositories"—— 它会直接覆盖全局源 - 执行时漏了
-g(即--global),结果只改了当前项目的本地配置 - 手动编辑过
~/.composer/config.json(Linux/macOS)或%USERPROFILE%\AppData\Roaming\Composer\config.json(Windows),但 JSON 格式出错(比如多一个逗号) - 缓存没清,旧元数据还记着原地址;执行
composer clear-cache再试
验证是否真生效:composer config --list | grep repo.packagist,看输出是不是你设的 URL。
本地开发时 path 仓库会绕过全局源
如果你在项目 composer.json 里写了 "repositories": [{ "type": "path", "url": "../my-lib" }],那这个包就完全不走任何远程源——包括你刚设的全局镜像。这是预期行为,不是 bug。
-
path类型仓库优先级高于全局repo.packagist - 它只影响声明了该仓库的包名,其他依赖仍走全局源
- 适合调试、并行开发,但别指望它能加速
require其他非本地包
最容易被忽略的是 JSON 格式校验和项目级 repositories 的覆盖逻辑——改完别急着跑 install,先 config --list 确认值对不对,再看项目里有没有“悄悄”顶替它的配置。

















