ci中composer install慢的根源是未缓存三个关键路径:~/.composer/cache/、~/.composer/files/和vendor/;仅缓存vendor/无效,必须三者同步缓存才能复用zip包、避免重复下载与校验。

CI里composer install为什么慢得像卡住
根本不是网络差或机器弱,而是每次构建都重走三步:下载全部ZIP包 → 解压进vendor → 生成autoload文件。这三步叠加,尤其在没缓存时,2分钟起步很常见。
必须同时缓存的三个路径
只缓存vendor/是白忙——Composer安装前会先从COMPOSER_CACHE_DIR(默认~/.composer/cache)里找已下载的ZIP包;漏掉它,照样重下。某些Composer 2.2+版本还会把校验文件写进~/.composer/files/,不缓存会导致重复校验。
-
vendor/:依赖目录,决定是否跳过安装 -
~/.composer/cache/:存ZIP包和dist元数据,决定下载阶段能否复用 -
~/.composer/files/:部分版本存放hash校验文件,漏掉会反复解压校验
--prefer-dist不生效的典型假象
加了参数却还在Cloning into 'vendor/xxx',不是参数没写对,而是根本没走dist模式。验证不能只看命令行,得看三处:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 加
-v运行:composer install -v,输出里出现Downloading https://.../archive/且无git clone字样才算真生效 - 检查
vendor/xxx目录:没有.git文件夹,基本可断定是dist;有.git就一定是source - 运行
composer show -s vendor/package:看dist字段是否非空,且url是HTTPS ZIP/TAR链接(不是git@github.com:这类SSH格式)
CI脚本里怎么稳住--prefer-dist不fallback
靠每次加--prefer-dist不够可靠,环境变量或本地状态可能覆盖它。最稳的是项目级配置:
- 在
composer.json的config段加"preferred-install": { "*": "dist" },比命令行参数优先级高 - 混合策略更实用:
"preferred-install": { "myorg/*": "source", "*": "dist" },自家私有包走git,第三方全走ZIP - CI命令固定组合:
composer install --no-interaction --prefer-dist --optimize-autoloader,三者缺一不可
注意通配符顺序:"*": "dist"必须放在最后,否则会覆盖前面的规则;匹配按包名前缀,"monolog"不匹配monolog/monolog,得写"monolog/"。










