确认镜像是否生效需执行composer config -g repo.packagist,输出必须为https://mirrors.aliyun.com/composer/等有效url;若为空、null或仍为packagist.org,则配置未生效,需检查用户权限、字段名拼写及composer版本兼容性,并用-vvv验证日志中是否出现镜像域名请求。

CI/CD 里 Composer 慢,不是网络卡,而是缓存没对上、镜像没走通、参数没锁死——三者缺一,提速就白配。
怎么确认镜像源真在用?
执行 composer config -g repo.packagist,输出必须是类似 https://mirrors.aliyun.com/composer/ 的 URL。如果为空、null 或仍是 https://packagist.org,说明配置根本没生效。
- CI 脚本里用
sudo composer config -g,很可能写进了root的~/.composer/config.json,但 runner 是普通用户,读不到 - 拼错字段名(比如写成
repos.packagist多了个s)会静默失败,查出来还是空 - 加
-vvv运行composer install,日志里出现GET https://mirrors.aliyun.com/composer/p2/才算真正走镜像 - 旧版 Composer(1.x)不认
repo.packagist,得用composer config -g repos.packagist '{"type":"composer","url":"https://mirrors.tuna.tsinghua.edu.cn/composer/"}'
为什么只缓存 vendor/ 反而更慢?
因为 Composer 安装前会先从 COMPOSER_CACHE_DIR 解包 ZIP、校验哈希、写临时文件。如果每次构建都清空缓存目录,那即使 vendor/ 命中了,仍要重复下载 + 解压 + 校验。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 现象:耗时稳定在 120s+,且网络请求量没减少
- 真正该缓存的是
~/.composer/cache(或显式设为$HOME/.composer-cache-$PHP_VERSION),它只跟composer.lock哈希绑定,与 PHP 版本、OS 无关 -
vendor/bin/是符号链接,缓存时若未排除,可能在不同 runner 上指向错误路径 - GitLab CI / GitHub Actions 必须同时声明两个缓存路径:
vendor/(排除vendor/bin/和vendor/autoload.php)和~/.composer/cache
composer install 必须带哪几个参数?
本地开发可以容忍慢,但 CI 构建里每秒都算钱。composer install 不带关键参数,等于主动浪费资源。
-
--no-dev:跳过require-dev,省掉 30%–60% 时间 -
--prefer-dist:优先用 tarball 而非 git clone,但注意它不跳过元数据刷新 -
--optimize-autoloader(或-o):生成vendor/composer/autoload_classmap.php,把 PSR-4 映射转成静态数组 -
--classmap-authoritative(或-a):告诉自动加载器“映射里没有,那就真没有”,彻底跳过文件系统扫描 —— 仅限生产/CI,开发环境加了会导致新增类找不到 -
--no-progress:减少输出开销;--no-scripts避免触发 post-install-cmd 等钩子(除非真需要)
CI 脚本里最常漏掉的两件事
一是没固定 COMPOSER_CACHE_DIR 路径,导致缓存落在容器临时目录,一销毁就丢;二是没验证 composer.lock 是否真的被提交并用于安装,反而跑 composer update 重新解析依赖。
- 开头加
export COMPOSER_CACHE_DIR=/tmp/composer-cache(确保可写且跨 job 持久化) - 用
composer install --no-interaction,而不是update—— 锁文件存在时,install直接装确定版本,跳过求解阶段 - CI 中禁用 Xdebug:
php -d xdebug.mode=off $(which composer) install,否则解析依赖慢 5–10 倍 - 别信“缓存 vendor 就够了”,也别信“开了 cache 步骤就自动快了”——缓存路径、key 策略、参数组合,三者必须对齐才有效










