composer执行慢主因是本地配置与命令误用,非网络问题;需删dev稳定性约束、禁用xdebug、设全局镜像与parallel-downloads、用--no-dev--prefer-dist等参数组合,实测可从3分钟压至30秒内。

Composer 项目慢,八成不是网络问题,而是配置没对、命令用错、或自动加载策略和缓存机制没生效。直接改全局 config 和 install 命令参数,多数项目能从 3 分钟压到 30 秒内。
composer install 卡在 Resolving dependencies 怎么办
这不是在下载,是本地 CPU 在暴力穷举所有版本组合——尤其当你写了 "monolog/monolog": "^1.0 || ^2.0" 或 "minimum-stability": "dev" 时,求解时间可能从秒级跳到分钟级。
- 删掉
minimum-stability字段(默认就是stable),避免 Composer 主动拉取 alpha/beta/dev 分支 - 确保
composer.lock已提交到 Git;没 lock 文件,install就退化成update - 临时禁用插件排查干扰:
composer install --no-plugins - 检查是否启用了 xdebug:
php -d zend_extension= -d xdebug.mode=off /usr/bin/composer install,它会让解析慢 5–10 倍
怎么让 composer install 真正快起来
关键不是换镜像,而是关掉默认的冗余动作。以下命令组合实测有效:
-
--no-dev:跳过require-dev中全部包(如 phpunit),省掉 30–60% 时间 -
--prefer-dist:强制走 ZIP 包而非 Git clone;但必须配合镜像源才生效,否则 fallback 到慢速 source -
--optimize-autoloader:生成扁平类映射,跳过 PSR-4 运行时扫描(注意:--optimize已废弃) -
--classmap-authoritative:告诉 autoloader “找不到就真没有”,不再 fallback 到文件系统——只应在生产或 CI 中使用,开发环境误用会导致新增类不被识别
完整命令示例:composer install --no-dev --prefer-dist --optimize-autoloader --classmap-authoritative
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
哪些全局 config 必须设
这些配置一劳永逸,影响所有项目,且优先级高于项目级配置:
-
composer config -g repos.packagist composer https://mirrors.aliyun.com/composer/(注意不是已停服的 laravel-china 源) -
composer config -g cache-dir ~/.composer/cache:务必指向 SSD 路径,别让它默认写进加密卷或机械盘 -
composer config -g discard-changes true:避免 CI 脚本卡在交互提示 “Discard changes and run install?” -
composer config -g parallel-downloads 8:Composer 2.2+ 才支持,并发数建议设为 CPU 核心数 × 1.5,但不超过 12
设完记得清缓存:composer clear-cache,否则旧元数据仍走海外源。
autoload 配置怎么写才不拖慢启动
vendor/autoload.php 加载慢,往往是因为 composer.json 里 autoload 块写得太宽:
- 别把
tests/或examples/目录塞进psr-4或classmap,它们会全量写入autoload_classmap.php,增大文件体积、拖慢 I/O - 小工具函数(如
helpers.php)改用"files": ["src/helpers.php"],比 PSR-4 匹配快一个数量级 -
classmap只列真正需要预扫描的路径,比如契约接口、异常类等静态结构明确的目录,别写["src/"]一股脑扫 - 检查
vendor/composer/autoload_classmap.php内容——如果看到大量测试类或 Mock 类路径,说明 autoload 配置已被污染
开发环境慎用 "classmap-authoritative": true,它在生产是加速项,在本地却是陷阱:类删了但 classmap 没更新,还会被加载。










