composer config -g repo.packagist 失效因键名、type值、URL格式三者必须严格匹配:键名为单数repo.packagist,type必须为"composer",URL须HTTPS且结尾带/;验证需输出完整JSON,空/null或仍为官方源即未生效。

composer config -g repo.packagist 命令为什么总不生效
根本不是网络或权限问题,而是三个字段必须严丝合缝:键名 repo.packagist(单数,不能是 repos.packagist)、中间的 composer 是必填 type 值(不是注释,漏掉就 fallback 到官方源)、URL 必须是 HTTPS 且末尾带 /(少斜杠会拼出 /composerpackages.json 导致 404)。
验证是否真写进去了,只看这一条命令输出:composer config -g repo.packagist,结果必须是完整 JSON,比如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。空、null 或仍是 https://packagist.org,说明压根没写成功。
项目级配置比全局更可靠,尤其在 CI 和多用户环境
全局配置在 GitHub Actions、Docker 构建、宝塔面板里经常失效——因为它们用的是 runner、www 或容器内用户,读不到你本地的 ~/.composer/config.json。
进项目根目录(确保有 composer.json),运行:composer config repo.packagist composer https://mirrors.aliyun.com/composer/(去掉 -g)。它会自动往 composer.json 的 repositories 字段安全追加,key 固定为 "packagist",不覆盖已有私有源。
注意:"repositories": [](数组)会导致命令报错;得先手动改成 "repositories": {}(空对象)再执行。
改完必须删掉 vendor/ 和 composer.lock,再跑 composer install(不是 update),否则旧 lock 文件仍指向官方源。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
多镜像 fallback 配置:用 repositories 数组实现自动故障转移
仅配一个镜像不够高可用,一旦该镜像临时不可用(503、404、同步延迟),整个流程就卡住。
在项目 composer.json 中直接写:
{
"repositories": [
{
"type": "composer",
"url": "https://mirrors.aliyun.com/composer/"
},
{
"type": "composer",
"url": "https://mirrors.cloud.tencent.com/composer/"
},
{
"type": "composer",
"url": "https://repo.packagist.org"
}
]
}Composer 会按顺序尝试,第一个失败就自动切到下一个。
注意:
"canonical": true 只能设在一个仓库上(通常是第一个),表示它是“权威源”,用于元数据生成;设多个或不设都可能影响 require-all 类镜像构建行为。不要把私有包源和公共镜像混在同一个数组里——私有源建议单独放,用
"packagist": false 关闭默认源后再显式声明,避免意外命中。
本地 Satis 镜像 + COMPOSER_MIRROR_PATH_REPOS 环境变量组合方案
企业级高可用的核心不是“换更快的公网镜像”,而是彻底离线可控。
部署本地 Satis 镜像后,关键一步是启用路径映射机制:COMPOSER_MIRROR_PATH_REPOS=1 环境变量会让 Composer 把所有请求重写为本地路径格式(如 https://satis.example.com/packagist/packages.json → file:///var/www/satis/web/packagist/packages.json),绕过 DNS 和 TLS 开销。
这个变量必须在每次运行前设置,比如:COMPOSER_MIRROR_PATH_REPOS=1 composer install;CI 脚本中建议写进 .env 或 pipeline env section。
搭配 cache-dir 指向本地 SSD 目录(composer config cache-dir /mnt/ssd/composer-cache),可进一步减少磁盘 IO 瓶颈。
真正容易被忽略的是:Satis 镜像必须定期 rebuild(用 php bin/satis build satis.json web/),且新包发布后需人工触发同步——它不会自动感知 packagist.org 上的变更。

















