ThinkPHP 5.1 Composer慢主因是PSR-4动态查找、镜像未切阿里云(须加-g)、dev包拖累;应执行composer install --no-dev --no-scripts --no-autoloader --prefer-dist,配合dump-autoload -o与classmap手动补全稳定目录,并关闭Xdebug。

ThinkPHP 5.1 的 Composer 慢,90% 不是框架问题,而是 autoload 走了 PSR-4 动态查找 + 镜像没切对 + dev 包拖累。三步就能从“等半分钟”变成“秒装”,关键在 dump-autoload -o、classmap 手动补全、全局镜像必须加 -g。
为什么 composer install 卡在 downloading 或解析超时?
不是网络差,是还在连 https://packagist.org。物理距离 + TLS 握手延迟导致首字节 >3s,尤其 Windows 下更明显。阿里云镜像同步延迟 ≤5 分钟,比清华、腾讯更稳,且对 topthink/framework 等核心包兼容性最好。
-
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/必须加-g,否则只改当前目录,create-project仍走海外源 - 验证命令:
composer config -g repo.packagist,输出必须是完整 URL,空值或https://packagist.org就等于没生效 - Windows 用户注意:路径含中文或空格(如
D:\我的项目\)会导致 autoload 失败,一律用纯英文路径 - 如果提示
file_get_contents(): SSL operation failed,先检查php -m | grep openssl,不是镜像问题
composer dump-autoload -o 为什么必须加 -o?
不加 -o 就只是重生成 PSR-4 映射表,类加载仍要拼路径 + is_file() 判断;加了才生成 vendor/composer/autoload_classmap.php,new 类时直接查哈希表,跳过所有 I/O。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
-
app/目录默认不进 classmap —— 必须手动在composer.json的"autoload"→"classmap"字段里加稳定子目录,例如:"app/common/"、"extend/sdk/" - 禁止把
"app/controller/"这类高频变更目录加进去,否则每次改控制器都要重跑dump-autoload - 执行后打开
vendor/composer/autoload_classmap.php,搜一个你加的类(如app\common\facade\Cache),确认它作为 key 出现在数组里才算成功 - 若部署后报
Class not found,说明该类没被 classmap 覆盖,回溯检查目录是否拼错、是否漏掉dump-autoload -o
composer install 时哪些参数能跳过“隐形拖累”?
ThinkPHP 5.1 运行时根本不需要 dev 包、post-install 脚本、甚至不需要即时生成 autoload —— 它们全是初始化阶段的冗余动作,尤其在 CI/CD 或首次部署时极易因权限或 Xdebug 中断。
立即学习“PHP免费学习笔记(深入)”;
-
--no-dev:跳过phpunit/phpunit、phpstan/phpstan等大体积包,省 40%+ 时间 -
--no-scripts:避免post-autoload-dump因runtime/目录权限失败而中断安装 -
--no-autoloader:不生成vendor/autoload.php,装完再单独跑composer dump-autoload -o更可控 - 完整推荐命令:
composer install --no-dev --no-scripts --no-autoloader --prefer-dist - Xdebug 必须关——它会让依赖解析慢 5 倍以上,PHPStorm 默认开启,别忽略
最容易被忽略的是:改完 composer.json 的 classmap 后,不删 vendor/ 和 composer.lock 就直接 install,结果 classmap 还是旧的;还有人验证镜像时只看命令有没有报错,不看 composer config -g repo.packagist 输出是不是真 URL。


















