ci中composer install卡住主因是未切国内镜像源,必须在项目级composer.json中配置"repositories": {"packagist": {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}},并搭配--no-interaction --prefer-dist --no-dev等参数,禁用autoload与脚本以提速。

CI流水线里 composer install 卡住几十秒甚至几分钟,八成不是网络带宽问题,而是还在连 packagist.org ——换镜像源是必须做的第一步,不是可选项。
为什么 CI 里 composer install 还走官方源?
最常见原因是配置没写进对的用户环境:CI 节点(比如 GitHub Actions runner、GitLab CI 的 docker-in-docker)通常以非 root 普通用户运行,但你本地执行的 composer config -g 写进了自己家目录下的 ~/.composer/config.json,CI 根本读不到。
还有几个静默失效点:
-
repo.packagist写成repos.packagist(多一个 s),Composer 完全忽略,不报错也不 fallback - URL 少了末尾斜杠:
https://mirrors.aliyun.com/composer❌ → 会拼出/composerpackages.json导致 404,但日志只卡在 “Loading repositories” - 用了
--repository-url临时参数,但 CI 脚本里漏了它,或者只加在require上——该参数对install和update生效,require不认
CI 脚本里怎么配才真正生效?
别依赖全局配置。CI 环境不可控、用户权限分散、缓存可能跨作业污染,项目级配置才是稳解:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 在项目根目录下运行
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(注意:不带-g) - 这条命令会安全写入
composer.json的"repositories"字段,key 必须是"packagist",不能改成"aliyun"或其他别名 - 已有
"repositories"字段时,命令自动合并,不会覆盖私有源;手动编辑 JSON 极易因逗号、引号或缩进错导致JSON decode error - 提交
composer.json后,所有 CI 作业、所有协作者都走同一套源,行为一致
换源后还是慢?先分清是下载慢,还是解析慢
composer install 卡在 Loading composer repositories 或 Downloading... → 镜像没生效,回退查 composer config -g repo.packagist 或加 -vvv 看日志里实际请求的域名。
但要是卡在 Resolving dependencies 阶段,和镜像完全无关:
- PHP 内存不够(
COMPOSER_MEMORY_LIMIT=-1临时放开) - 启用了 Xdebug(
php -d xdebug.mode=off $(which composer) install) -
composer.json里"php"版本约束太宽,比如"^7.4 || ^8.0 || ^8.1",让 Composer 反复试探兼容性 -
composer.lock里残留已下线包,触发回退搜索逻辑 —— 直接删掉vendor/和composer.lock,再composer install --no-cache
CI 中额外提速的关键细节
镜像只是起点,CI 场景还要叠加这几条:
- 务必用
composer install --no-interaction --prefer-dist --no-dev --no-autoloader --no-scripts,跳过 autoload 生成和脚本执行(这些可在部署后单独做) - 缓存只认
~/.composer/cache(Linux/macOS)或%APPDATA%\Composer\cache(Windows),不要缓存vendor/—— 它绑定 PHP 版本和扩展,多包共用会随机报Class not found - 如果用 Docker 构建,把镜像配置写进基础镜像的
Dockerfile:RUNcomposer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,避免每次构建都重配 - ECS 或内网环境必须用阿里云内网地址:
https://mirrors.aliyuncs.com/composer/,少一次公网跳转,延迟直降 50ms+
镜像 URL 对了、缓存路径对了、命令参数对了——这三处任一出错,提速就归零。CI 不认“差不多”,只认精确匹配。










