composer config -g repo.packagist 必须严格满足五点:单数键名、type 值为 "composer"、url 末尾带斜杠、用 -g 参数、输出为完整 json 对象;否则静默回退至 packagist.org。

composer config -g repo.packagist 命令为什么总不生效
它根本不会报错,但只要漏掉一个硬性条件,就静默 fallback 到 packagist.org。不是网络慢,是配置压根没写进去。
-
repo.packagist必须是单数形式——写成repos.packagist、packagist.org或mirror都无效 - 中间的
composer是 type 值,不是可选参数,也不能省略或替换成其他字符串 -
https://mirrors.aliyun.com/composer/末尾斜杠/不可少;少一个会拼出/composerpackages.json导致 404 - 必须用
-g参数,否则只改当前目录下的composer.json,换项目就失效
验证是否真写进去了:运行 composer config -g repo.packagist,输出必须是完整 JSON 对象,形如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。空、null、或只返回 URL 字符串,说明没成功。
项目级配置如何避免清空私有源
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(不带 -g)会全量替换 repositories 字段,不是追加——已有 Git 私有源或 Satis 源会被直接抹掉。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 如果
composer.json中repositories是数组[],该命令会失败;需先手动改成对象{}再执行 - 更安全的做法是手动编辑
composer.json,确保"packagist.org": false在根节点(非repositories内部),再把镜像作为"packagist"键写入repositories - 项目级配置优先级高于全局,哪怕你刚配好全局,只要
composer.json里有repositories字段,就会彻底屏蔽全局设置且不提示
换镜像后 vendor 安装失败的真正原因
不是镜像不可用,而是旧缓存和 composer.lock 里的哈希与 dist URL 来自官方源,和镜像服务的路径映射不一致,校验必然失败。
- 必须先运行
composer clear-cache - 删掉项目下的
vendor/和composer.lock - 再执行
composer install(不是update),让 Composer 重新解析依赖并生成新 lock 文件 -
composer update不会重走镜像流程,它只基于现有composer.lock解析,即使镜像已配好也无用
宝塔、CI 等多用户环境下的权限陷阱
全局配置写在 ~/.composer/config.json,但它只对「执行命令的用户」生效。宝塔后台、GitHub Actions runner、Docker 构建默认用的是 www、runner 或容器内用户,根本读不到你本地的配置。
- 在宝塔终端先运行
whoami确认实际用户,比如是www,就得用sudo -u www composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - CI 脚本中常见错误:前面用
sudo配置,后面普通用户跑composer install,两者配置文件完全隔离 - 某些项目
composer.json里写了"packagist.org": false,会直接屏蔽全局镜像,得手动删掉或改成true
最易被忽略的一点:镜像只代理元数据(packages.json),不参与签名验证。生产环境若用 composer config -g repo.packagist 全局替换,会丢失 signature 字段,导致 Composer 2.5+ 自动跳过完整性校验——快是快了,但 vendor 里可能已经混进恶意代码。










