改了cache-dir仍无效是因为Composer不解析~或$HOME,必须用绝对路径;目录须手动创建并赋予权限;验证应以composer diag输出的Cache directory为准,而非config命令结果。

为什么改了 cache-dir 还是没缓存到指定位置
Composer 不解析 ~ 或 $HOME,composer config --global cache-dir ~/composer-cache 这类写法会静默失效,最终 fallback 到默认路径(Linux/macOS 是 ~/.cache/composer,Windows 是 %LOCALAPPDATA%\Composer\Cache)。真正生效的只有绝对路径。
必须手动创建目录并确保当前用户有读写权限:比如 Linux 下运行 mkdir -p /d/composer-cache && chmod 755 /d/composer-cache;Windows 下用 mkdir D:\composer-cache。否则 Composer 会悄悄退回到默认缓存位置,你完全感知不到配置失败。
验证是否真生效,别只看 composer config --global cache-dir 的输出——它只显示配置值。真正要看的是 composer diag 输出中的 Cache directory: 行。如果这里还是默认路径,说明要么目录没建、没权限,要么被环境变量覆盖了。
离线场景下唯一该配的配置项是 cache-files-dir
cache-files-dir 是专为离线设计的配置,它只控制 files/ 子目录位置,不干扰 repo/ 或 archived/。而只有 files/ 下的 ZIP 包(如 monolog/monolog/2.10.0.0/monolog-monolog-6a8c4b5.zip)能在断网时被 --prefer-dist 直接复用。
操作步骤:
- 先清旧配置:
composer config --global --unset cache-dir(避免冲突) - 设新路径:
composer config --global cache-files-dir /path/to/offline-cache - 触发下载:
composer install --no-autoloader --no-scripts --prefer-dist - 验证是否生效:检查目标路径下是否有符合
vendor/name/version-hash/filename.zip结构的文件
注意:cache-files-dir 设定后,composer install --prefer-dist 才会强制把所有 ZIP 写进该路径,方便打包带走。其他子目录(如 repo/)断网即失效,不用管。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
镜像源配错一个字符就静默 fallback 到 packagist.org
离线机上若保留默认 packagist.org 配置,composer install 会卡死或报 Could not fetch packages。关键不是 URL 对不对,而是三要素缺一不可:
- 键名必须是
repo.packagist(单数,不能是repos.packagist或packagist.org) -
type值必须显式写"composer"(不是可选参数,也不是注释) - URL 必须 HTTPS 开头 + 末尾带
/(例如https://mirrors.aliyun.com/composer/✅,少斜杠就 404)
验证命令:composer config -g repo.packagist,输出必须是完整 JSON 对象,形如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。空、null、报错、或只返回字符串,都说明没生效。
打包缓存前必须确保所有子依赖 ZIP 都已下载全
composer.lock 只记录每个包的 dist.url 和 dist.shasum,离线时 Composer 会去 ~/.composer/cache/files/ 找对应 ZIP 并靠哈希校验匹配。但前提是这些包真被下全了——漏一个子依赖(比如 psr/log),就会报 Package not found。
在线机必须执行完整安装:composer install --no-dev --prefer-dist,不能只 composer update 或 composer require 主包;否则子依赖(transitive dependencies)不会进缓存。
必须打包整个 ~/.composer/cache/files/ 目录,不能只拷部分 ZIP;Windows 路径通常是 C:\Users\用户名\AppData\Roaming\Composer\Cache\files。离线机需显式配置缓存路径:composer config --global cache-files-dir /your/local/cache/path,否则 Composer 默认仍查原路径(可能为空)。
最容易被忽略的是:ZIP 文件名含哈希,结构是 vendor/name/version-hash/filename.zip,不可手动改名;且该方式对含 git 仓库源的包无效——必须加 --prefer-dist 强制走 ZIP 分发包。

















