国内直连packagist.org基本不可用,需强制切换国内镜像源;执行composer config -g repo.packagist确认是否生效,再用curl -i测试镜像连通性,同时检查parallel-downloads、composer版本、autoload优化及缓存清理等关键配置。

国内直连 packagist.org 基本不可用,不是你网差,是 DNS 解析慢、TLS 握手失败、无 CDN 路由绕行三重卡点。换镜像源不是“可选项”,而是所有优化的前提。
怎么确认当前用的是哪个源
执行 composer config -g repo.packagist,输出里必须明确看到 "url": "https://mirrors.aliyun.com/composer/" 或类似国内地址。如果还显示 packagist.org 或空值,说明镜像没生效。
- 别信
composer.json里写了repositories就万事大吉——那只影响当前项目,create-project、全局命令仍走默认源 -
composer show -p可列出所有已注册源,确认packagist类型的源是否已替换 - 验证镜像是否真通:
curl -I https://mirrors.aliyun.com/composer/packages.json,秒回200才算靠谱;若超时或503,得换源或查代理设置
为什么换了源还是卡在 downloading
大概率是并发下载没开,或者 Composer 版本太老。Composer 2.2+ 才原生支持 parallel-downloads,而默认值仅 3,根本不够用。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 查当前值:
composer config -g parallel-downloads,如果不是 10 或更高,就补上:composer config -g parallel-downloads 10 - 别设成 20:高并发可能触发
file_put_contents(/tmp/): failed to open stream,降到 6–8 更稳 - 运行
composer --version确认版本;若是 1.x(如1.10.22),先升级:composer self-update --prefer-dist - 已装过
hirak/prestissimo的必须卸载:composer global remove hirak/prestissimo,它在 2.x 中已失效,甚至会静默降级为单线程
vendor 目录存在但 install 还慢,问题不在网络
这时候耗时主要来自本地 I/O 和 PHP 解析开销,尤其是 autoload dump 阶段。Composer 3.x 默认启用 classmap-authoritative 模式,每次 update 都强制全量扫描 vendor 目录生成 classmap。
- 关掉它:
composer config authorative false(注意拼写是authorative,不是authoritative) - 或删掉
composer.json里的"optimize-autoloader": true字段 - 如果只是部署,加
--no-autoloader跳过 autoload 生成,后续再按需跑composer dump-autoload --optimize - CI 环境建议组合使用:
composer install --no-dev --prefer-dist --no-autoloader --no-scripts,省掉冗余步骤
哪些参数必须加,哪些绝对不能加
--prefer-dist 和 --no-dev 不是“试试看”,是生产环境必加项;而 --verbose、-vvv、xdebug 这类调试开关,在日常安装中就是减速带。
- 全局启用
--prefer-dist:composer config -g prefer-dist true;若项目已有"prefer-source": true,必须手动删掉,否则不生效 -
--no-dev能跳过require-dev中全部包(如phpunit),省掉 30–60% 时间 - 禁用
xdebug:php -d xdebug.mode=off $(which composer) install,它会让依赖解析慢 5–10 倍 - 别加
--secure-http=false长期开着,公司内网若真禁 HTTPS 重定向,优先修复证书或代理配置
最容易被忽略的其实是缓存残留和旧 lock 文件。换源后不 clear-cache,或 composer.lock 里还引用着已下线的包,都会让 Composer 在后台反复回退查找、重试失败请求——看起来像卡住,实际是逻辑阻塞。










