composer安装慢90%非网络问题,而是镜像未生效、parallel-downloads未启用或--prefer-dist未正确配置;需执行composer config -g repo.packagist验证镜像url、clear-cache清缓存、设parallel-downloads=10并确保项目无prefer-source覆盖。

Composer安装包慢,90%不是网速问题,而是默认配置没调、命令没用对、镜像没生效——三步到位:换阿里云镜像、开parallel-downloads=10、强制--prefer-dist,多数项目能从 3–5 分钟压到 30 秒内。
怎么确认镜像源真的切成功了
执行composer config -g repo.packagist,输出必须包含"url": "https://mirrors.aliyun.com/composer/"。如果还是packagist.org或空值,说明没生效。常见原因有:
• 误改了~/.composer/config.json但格式出错,覆盖了全局配置
• 项目级composer.json里写了"repositories"字段,优先级高于全局,得删掉或改成镜像地址
• 缓存没清,旧元数据还在拉海外源,必须立刻跑composer clear-cache
• 某些 CI 环境(如 GitHub Actions)没设全局配置,每次构建都重来,得在 workflow 中提前加composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
parallel-downloads设多少才不翻车
这个参数只在 Composer 2.2+ 生效,低于版本设了也白搭,先用composer --version确认。设太高反而拖慢:
• 默认是 3,基本等于没开
• 推荐设为 10,多数本地机和 CI 环境稳定
• 如果报file_put_contents(/tmp/): failed to open stream,说明临时文件竞争,降到 6 或 8
• 镜像源不支持 HTTP/2 多路复用时,并发请求会被排队堵死,可临时切回官方源测试:composer config -g repo.packagist composer https://packagist.org再试--concurrency=6
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
为什么加了--prefer-dist还是在 clone Git
这不是命令无效,而是条件不满足:
• 包本身没提供 dist 信息(比如私有 GitHub/GitLab 包没显式声明"dist"字段),--prefer-dist会静默 fallback 到 source
• 项目composer.json里写了"prefer-source": true,它会覆盖全局prefer-dist,必须手动删掉
• 日志里看不到Downloading https://mirrors.aliyun.com/composer/dists/,却看到Cloning https://github.com/,说明根本没走镜像 dist 路径
• path类型依赖(如"monolog/monolog": {"type": "path", "url": "../monolog"})无法走 dist,必然 fallback 到 source,且不参与并发下载
CI/CD 中composer install必加的参数组合
本地开发可以宽松,但 CI 构建每秒都算钱,漏一个参数都可能让安装时间翻倍:
• --prefer-dist:跳过 git clone,只下 zip/tar
• --no-dev:跳过 require-dev(PHPUnit、PHPStan 占体积大头)
• --no-scripts:防止 post-install-cmd 触发 npm 构建、DB 迁移等意外操作
• --no-autoloader:不生成vendor/autoload.php,后续用composer dump-autoload --optimize单独补,更可控
注意:--no-autoloader装完不能直接跑 PHP,必须补一次 autoload 生成;--no-scripts会跳过所有钩子,包括 Laravel 的key:generate,得手动补
最易被忽略的点是:即使全局配好了镜像、并发、prefer-dist,只要项目composer.json里有一行"prefer-source": true,所有加速就归零。这类覆盖项不会报错,只会默默退回到慢速路径——检查时别只看命令,得翻代码。










