小团队协作中composer config -g repo.packagist总失效,因其仅写入当前用户~/.composer/config.json,而ci、宝塔www-data、docker等环境无法读取;且项目级composer.json中任意repositories字段(含空数组[])会无条件屏蔽全局配置,必须改用项目级配置+删vendor和composer.lock确保生效。

小团队不该共享 Composer 缓存,但必须统一镜像源;靠 composer config -g 配置全局镜像在协作中基本不可用,真正起效的是项目级 repositories 配置 + 显式清理旧文件。
为什么 composer config -g repo.packagist 在小团队里总是失效
这条命令只写进当前用户的 ~/.composer/config.json,而 CI 流水线、宝塔的 www-data、Docker 容器里的非 root 用户,根本读不到它。更隐蔽的问题是:哪怕你本地配成功了,队友克隆项目后 composer install 依然连官方源——因为项目根目录的 composer.json 里只要出现 "repositories" 字段(哪怕只是空数组 []),全局配置就彻底被跳过。
-
repo.packagist键名必须一字不差:写成repos.packagist或packagist.org都静默失败 - 中间的
composer是type值,不是可选参数,漏掉就 fallback 回https://packagist.org - URL 必须以
/结尾:https://mirrors.aliyun.com/composer/✅,少斜杠会拼出/composerpackages.json导致 404 - 验证是否真写入:运行
composer config -g repo.packagist,输出必须是完整 JSON,如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}
项目级配置才是小团队唯一可靠的做法
进项目根目录执行 composer config repo.packagist composer https://mirrors.aliyun.com/composer/(不加 -g),它会自动向 composer.json 的 repositories 数组追加条目,不破坏已有私有源。但要注意:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 如果原
composer.json里"repositories"是空对象{},命令会转为标准数组并插入;如果是数组[],命令可能报错,需先手动改成{} - 改完必须删掉
vendor/和composer.lock:否则composer.lock里仍记录着旧源的 dist URL,composer install会继续按旧地址下载,校验失败报Hash mismatch - 删完只跑
composer install(不是update),让 Composer 从头解析依赖、生成适配新镜像的 lock 文件 - 确保
"packagist.org": false出现在repositories数组第一项,否则镜像可能被绕过
CI/CD 和 Docker 环境下怎么避免镜像失效
GitHub Actions、GitLab Runner 或自建 Jenkins 默认以普通用户(如 runner)执行命令,不会读取开发者本地的 ~/.composer。Docker 构建时若用 root 用户安装依赖,但运行时切到 www-data,也会因权限和路径不一致导致镜像未生效。
- CI 脚本中不要依赖
composer config -g,直接在composer.json里写好repositories,然后rm -rf vendor composer.lock && composer install - Dockerfile 中把
/etc/composer/config.jsonCOPY 进镜像(需满足目录权限 755、文件权限 0644、属主root:root),内容格式严格为对象而非数组,键名必须是"packagist.org" - 宝塔面板里,PHP CLI 常禁用
proc_open、putenv,先在「PHP 管理」→「禁用函数」里删掉它们,再配镜像,否则命令根本跑不起来 - 所有环境都应设
COMPOSER_HOME="$HOME/.composer"到 shell 初始化文件,避免sudo composer把缓存写到 root 目录下
最易被忽略的点是 composer.lock 里记录的 dist URL —— 它一旦生成就绑定源地址,切换镜像后不删锁文件,等于白配。小团队协作时,别省那几秒 rm -rf vendor composer.lock,这是唯一能保证所有人行为一致的操作。










