运行composer config --global cache-dir可确认composer实际使用的缓存路径,它输出绝对路径(如/data/composer-cache),而非默认的~/.composer/cache或%appdata%\composer\cache;路径需手动创建并确保当前用户有读写权限,且不能含~符号。

怎么确认 Composer 正在用哪个缓存路径?
别猜,先查真实路径——很多人删错地方,是因为缓存早被 COMPOSER_CACHE_DIR 或公司镜像覆盖了,默认的 ~/.composer/cache 或 %APPDATA%\Composer\Cache 根本不是当前生效目录。
运行这条命令:
composer config --global cache-dir
它输出的才是 Composer 实际写入的位置。Windows 用户可直接把结果粘贴到资源管理器地址栏(比如 %APPDATA%\Composer\Cache),右键“属性”看大小;Linux/macOS 用:
du -sh $(composer config --global cache-dir)
不到 200 MB?基本不用动;超 1.5 GB 且半年没碰老项目,才值得迁移。
为什么不能直接改配置文件,而要用 config 命令?
composer config --global cache-dir 会自动写入 ~/.composer/config.json(Windows 是 %APPDATA%\Composer\config.json),并确保格式合法、权限正确。手改 JSON 容易出错,比如漏逗号、引号不闭合,导致后续所有 Composer 命令报错:file_put_contents(): failed to open stream。
注意三点:
- 路径必须是绝对路径,
~不会被解析,写/data/composer-cache,别写~/composer-cache - 目标目录得提前创建好,且当前用户有读写权限(Linux/macOS:用
chmod 755 /data/composer-cache;Windows:右键目录 → “属性” → “安全” → 确保当前用户有“完全控制”) - 改完立刻生效,但旧缓存不会自动搬过去,要手动迁移或清掉(见下一条)
迁移后要不要搬旧缓存?怎么搬最安全?
不搬也行,但浪费空间;全删太可惜,尤其你常离线开发或带宽受限。推荐只搬三类有效内容:
-
cache/files/:所有 ZIP/TAR 包,离线安装必需,体积最大,优先搬 -
cache/repo/:主要是packagist.org/packages.json这类元数据,能加速首次composer update,建议搬 -
cache/archived/:Composer 2.5+ 新增的归档缓存,和 files/ 类似,也建议搬
别搬 cache/vcs/ —— 它全是 Git 裸仓库,单个就 300–800 MB,还极难复用;禁用它比搬更省事:composer config --global cache.vcs false。
搬的命令示例(Linux/macOS):
mkdir -p /data/composer-cache/{files,repo,archived}<br>cp -r ~/.composer/cache/files/* /data/composer-cache/files/<br>cp -r ~/.composer/cache/repo/* /data/composer-cache/repo/<br>cp -r ~/.composer/cache/archived/* /data/composer-cache/archived/
迁移后还要做哪些关键收尾?
光改路径不够,容易踩坑:
- 删旧缓存前,先停掉所有 Composer 进程(IDE 内嵌的、后台 php composer.phar、CI 脚本残留),否则可能损坏新缓存索引
- 临时目录(
sys_get_temp_dir())仍可能往 C 盘写composer_*.zip,查路径:php -r "echo sys_get_temp_dir();",把它也软链到大分区或改 PHP 配置 - CI/CD 环境里,记得在脚本开头加
COMPOSER_CACHE_DIR=/data/composer-cache,避免因环境变量覆盖 config 设置 - 如果用了
cache-max-size(Composer 2.5+),记得同步更新:composer config --global cache-max-size "2G"
真正卡住人的,从来不是迁移命令本身,而是忘了临时目录和进程锁——这两处一漏,C 盘照样爆满,还找不到原因。











