composer不支持直接配置解压路径;可控路径仅有三处:cache-files-dir(归档包缓存)、config.vendor-dir(最终安装目录)、installer-paths(仅对特定type包生效)。

Composer不支持直接配置解压路径,它只控制缓存和安装路径
Composer 没有 unzip-dir、extract-path 或类似配置项。所谓“解压路径”,其实是两个阶段的产物:下载归档包(.zip/.tar.gz)存到 cache-files-dir,再临时解压到 vendor/ 下对应目录——后者不可配置,前者可管但需绕过常见误解。
为什么改 cache-dir 不等于改解压路径
cache-dir 只是缓存根目录,真正存放 .zip 包的是它的子目录 files/。如果只运行:
composer config --global cache-dir ~/.composer/cache
那 ~/.composer/cache 下不会自动出现 zip 文件——因为 Composer 默认把归档包写进 ~/.composer/cache/files/,而这个子路径没被显式声明时,会 fallback 到内置逻辑,可能失效或走默认路径。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 必须显式设置
cache-files-dir,且值必须含files子目录,例如~/.composer/cache/files - Windows 上注意:
%APPDATA%\Composer\Cache\files在 PowerShell 中不自动展开,建议用 CMD 或先执行echo %APPDATA%查真实路径 - 改完后不执行
composer clear-cache,旧缓存残留会导致新路径不生效
临时解压过程无法跳过,但可以避免触发 ZipArchive::extractTo 错误
你手动放一个 .tar.gz 到 vendor/ 目录下,composer install 仍报 ZipArchive::extractTo 错误,不是因为路径不对,而是 Composer 在校验或 fallback 阶段强制调用了 ZIP 扩展——哪怕你根本没用 zip 包。
- 确认 PHP 是否启用了 zip 扩展:
php -m | grep zip;若启用,又没配好phar或系统tar命令,就会卡在 extractTo - 不要手动往
vendor/放压缩包;正确做法是用pathrepository 映射已解压好的目录,完全绕过下载和解压流程 - 若坚持本地加载,包目录结构必须完整:
vendor/{vendor}/{package}/composer.json必须存在且含autoload字段,否则autoload.php不认它
真正可控的“路径”只有三处,别混淆它们的作用
很多人想“自定义解压路径”,其实是混淆了三个独立概念:
-
cache-files-dir:.zip/.tar.gz 归档包的**只读缓存位置**,影响下载复用率 -
config.vendor-dir:所有包最终**安装并生成 autoload.php 的目标目录**,必须在composer.json里写相对路径,且首次install前vendor必须不存在 -
installer-paths:仅对声明了特定type(如wordpress-plugin)且已装对应 installer(如composer/installers)的包生效,**不是通用解压路径开关**
这三个路径互不覆盖,也无继承关系。最常被忽略的是:即使 cache-files-dir 和 vendor-dir 都设对了,只要 PHP 版本、composer.lock 内容、镜像源三者有一项不一致,Composer 就拒绝复用缓存——这不是路径问题,是内容校验逻辑本身决定的。










