必须同时满足三要素:键名repo.packagist(单数)、type值显式写composer、URL以HTTPS开头且末尾带/,否则静默失效;验证需执行composer config -g repo.packagist输出完整JSON。

composer config -g repo.packagist 命令必须写对三要素
全局换源最常用命令是 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,但错一个字符就静默失效——不是报错,而是继续连 packagist.org。
必须同时满足:
- 键名是 repo.packagist(不是 repos.packagist、mirror 或 repositories)
- 中间 composer 是 type 值,不能省略或写成空字符串
- URL 必须以 / 结尾,写成 https://mirrors.aliyun.com/composer 会拼出错误路径导致 404 或 fallback 到官网
验证是否写入成功:运行 composer config -g repo.packagist,输出应为类似 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} 的 JSON 对象。如果为空、null 或提示 key not exist,说明配置没落进全局文件。
项目级配置优先级高于全局,且结构容易写错
只要项目根目录的 composer.json 含 "repositories" 字段,全局设置就完全不生效。这不是 bug,是 Composer 明确设计的行为。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
常见错误写法:
- 只写镜像对象,不显式禁用默认源:{"type":"composer","url":"https://mirrors.aliyun.com/composer/"}
- 把 "packagist.org": false 放在数组后面,甚至漏掉它
正确结构必须包含两部分(顺序不能颠倒):
- 第一项:{"packagist.org": false}(彻底关闭官方源)
- 第二项:{"type":"composer","url":"https://mirrors.aliyun.com/composer/"}
整个 "repositories" 字段应为数组,且不能是空数组或只含一个对象
换源后仍卡在 packages.json 或超时?先清缓存再验证
Composer 缓存的是元数据(如 packages.json),不是包本身。改完配置不清理缓存,旧索引还在,请求依然发往原地址。
务必执行:
- composer clear-cache(推荐,清全部)
- 或手动删缓存目录:rm -rf ~/.composer/cache/repo/https---mirrors.aliyun.com-composer/(Linux/macOS)
- Windows 下对应路径是 %APPDATA%\Composer\Cache\repo\https---mirrors.aliyun.com-composer\
验证是否真走镜像:
- 运行 composer update -vvv
- 搜索日志里的 GET 行,确认域名是 mirrors.aliyun.com 或你设的镜像地址
- 不要看下载速度,快 ≠ 走了镜像;composer diagnose 输出中 Repo packagist.org: 后面的地址才是真实生效源
Windows 和 CI 环境下容易被忽略的路径与权限问题
Windows 用户执行 composer config -g 后,常因终端未重启而读不到新配置——shell 缓存了旧环境变量或配置路径,关掉当前 CMD/PowerShell 再重开才生效。
CI/CD 流水线里更隐蔽:
- 用 sudo composer config -g 会把配置写进 root 用户的 ~/.composer/config.json
- 但构建通常以普通用户身份运行,根本读不到该文件
- Git Bash 和 CMD/PowerShell 的 %APPDATA% 路径也不互通,同一台机器可能有多个配置文件
最稳妥做法:
- 在 CI 脚本开头显式指定 COMPOSER_HOME 环境变量
- 或直接用 echo '{...}' > %APPDATA%\Composer\config.json(Windows)覆盖写入
- 避免依赖交互式命令,尤其在无权写用户目录的容器环境中

















