composer config -g 总是失效是因为它仅修改当前用户的 ~/.composer/config.json,而 PHP 实际运行用户(如 www-data、nginx 或 CI 的 runner)无法读取该配置;真正全局生效的是 /etc/composer/config.json,需确保目录存在、权限为 0644、属主 root:root,且 "repositories" 为对象、键名严格为 "packagist.org"、URL 为 HTTPS 并以 / 结尾。

为什么团队里 composer config -g 总是失效
因为 composer config -g 只改当前用户的 ~/.composer/config.json,而团队里 PHP 实际运行用户(比如 www-data、nginx 或 CI 的 runner)根本读不到你的配置。你本地执行成功,服务器上照样卡在 Loading composer repositories。
-
/etc/composer/config.json是唯一真正全局生效的路径,所有用户(包括www-data)都会加载它 - 目录必须存在:
mkdir -p /etc/composer && chmod 755 /etc/composer - 文件权限必须是
0644,属主root:root -
"repositories"必须是对象(不是数组),键名严格为"packagist.org" - URL 必须是 HTTPS + 末尾带
/,例如:"https://mirrors.aliyun.com/composer/"
项目级配置怎么不破坏私有源
直接运行 composer config repo.packagist composer https://mirrors.aliyun.com/composer/ 会清空整个 repositories 字段——如果你项目里原本就定义了 Git 私有包或企业 Nexus 源,它们就没了。
- 手动编辑
composer.json,确保"repositories"是数组格式 - 首位加镜像项:
{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 已有私有源保留在同一数组中,顺序不影响解析
- 不要写
"packagist.org": false在根节点,否则 PHP 扩展校验可能失败 - 改完必须删掉
vendor/和composer.lock,再跑composer install
换镜像后还报 Could not find package 怎么办
这不是网络问题,是老项目 composer.lock 里记录的 dist URL 和 hash 来自 packagist.org,换镜像后没重建 lock 文件,Composer 仍按旧地址下载,但镜像可能已下线该旧版本(如 symfony/console v3.4)。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 老项目必须执行:
composer config repositories.packagist.org false,它会在composer.json加"repositories": {"packagist.org": false},禁用兜底,强制走 lock 记录的原始 URL - 新项目才用:
composer config repositories.alipay composer https://mirrors.aliyun.com/composer/ - 华为云镜像路径含
/repository/php/composer/,漏掉/php/就 404;腾讯云地址不能多写/,否则cURL error 60 - 验证是否真走镜像:看
composer install -vvv日志里出现的是镜像域名,不是packagist.org
CI 流水线里镜像为啥不生效
Docker 构建阶段、GitHub Actions runner、宝塔后台的 www 用户,都不继承你本地的 ~/.composer。而且多阶段构建中,每个含 composer 的阶段都得单独配一次。
- Dockerfile 里必须显式写:
RUN composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/(注意末尾/) - 验证命令也得加在 RUN 里:
RUN composer config -g repo.packagist输出必须是完整 JSON 对象 - 别指望
--from=builder继承配置,它不带 Composer 全局设置 - CI 脚本中
composer create-project不支持-r参数,必须先config -g再执行 - Alpine 镜像记得补证书:
RUN apk add --no-cache ca-certificates,否则 SSL 校验失败
最容易被忽略的点是 composer.lock 里的 dist.url —— 它决定了最终下载地址,换镜像不删 lock 文件,等于没换。

















