离线安装必须用cache-files-dir而非cache-dir,因composer仅从此路径下哈希命名的zip包加载依赖;只配cache-dir无效,且该路径须为cache-dir子目录、存在可写、结构完整。

离线安装必须用 cache-files-dir,不是 cache-dir
Composer 离线安装依赖时,真正起作用的是 cache-files-dir,它指向 ZIP/TAR 包的缓存位置。只配 cache-dir 是无效的——后者管的是元数据(如 repo/)、临时提取文件等,但离线 install 时 Composer 只认 cache-files-dir 下的哈希命名 ZIP 包。
常见错误现象:Package not found,查日志发现是子依赖(比如 psr/log)缺失;其实包早下好了,只是没放在 cache-files-dir 路径里,Composer 根本不看。
-
cache-files-dir必须是cache-dir的子目录,典型值为~/.composer/cache/files(Linux/macOS)或C:\Users\用户名\AppData\Roaming\Composer\Cache\files(Windows) - 路径必须存在且可写,Composer 不会自动创建;Windows 下若含空格或中文,会静默 fallback 到默认路径
- 配置命令是:
composer config --global cache-files-dir /your/local/cache/files(注意结尾的/files) - 验证是否生效:运行
composer diag,确认输出中Cache directory行后面跟着的路径,且该路径下有files/子目录和一堆哈希名 ZIP
离线机必须显式设置 cache-files-dir,否则查不到本地包
离线机器上,Composer 默认仍会尝试读取原缓存路径(比如 ~/.composer/cache/files),如果该路径为空或不存在,它不会 fallback 到你拷过来的缓存目录——而是直接报错“找不到包”。
所以迁移后第一件事不是运行 install,而是强制指定新路径:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 执行:
composer config --global cache-files-dir /mnt/offline-cache/files(Linux)或composer config --global cache-files-dir D:\offline-cache\files(Windows) - 确保该路径已手动创建:
mkdir -p /mnt/offline-cache/files或资源管理器新建D:\offline-cache\files - 检查权限:Linux/macOS 下
ls -ld /mnt/offline-cache第三列应为当前用户;Windows 下右键属性 → 安全 → 当前用户要有“完全控制” - 别信
composer config -g cache-files-dir输出——它只显示配置项。真正要看composer diag的实时路径
打包缓存时只拷 files/ 目录不够,还要保证完整 ZIP 结构
离线迁移缓存,不能只复制 files/ 下的 ZIP 文件,必须保留原始目录结构。因为 Composer 查找 ZIP 时,路径由包名、版本、哈希三重决定,例如:files/vendor-name/package-name/abc123def4567890.zip。
常见错误操作:把所有 ZIP 拷进一个扁平目录,结果 composer install 仍提示缺失——它压根不会去扫描那个目录。
- 正确打包方式:打包整个
~/.composer/cache/files/目录(含所有子目录层级) - Windows 用户注意路径分隔符:
C:\Users\Alice\AppData\Roaming\Composer\Cache\files,不要手动生成斜杠混用的路径 - 验证打包完整性:解压后运行
find /path/to/offline-cache/files -name "*.zip" | head -n 3,确认路径含多级目录,而非全在根下 - 如果用 rsync 或 7z 打包,请禁用“存储路径信息”以外的压缩选项,避免解压后路径错乱
COMPOSER_CACHE_DIR 环境变量会覆盖所有配置,CI/Docker 必须优先用它
在 CI 流水线或 Docker 容器里,composer config --global 配置常被忽略,因为环境变量 COMPOSER_CACHE_DIR 优先级最高。它不仅控制 cache-dir,也隐式影响 cache-files-dir 的解析逻辑。
最容易被忽略的一点:设了 COMPOSER_CACHE_DIR 后,cache-files-dir 会自动推导为 $COMPOSER_CACHE_DIR/files——所以你不必再单独配 cache-files-dir,但必须确保该 /files 子目录存在。
- Dockerfile 中写:
ENV COMPOSER_CACHE_DIR=/cache,然后RUN mkdir -p /cache/files - GitHub Actions 中,在
env:块里加:COMPOSER_CACHE_DIR: ${{ github.workspace }}/composer-cache - 验证方式:
php -r "echo getenv('COMPOSER_CACHE_DIR');"和composer diag | grep 'Cache directory'必须一致 - 如果
composer diag显示路径不对,说明环境变量没传进 Composer 进程(Docker 忘加--env,Actions 忘加env:)
cache-files-dir 和实际 ZIP 文件的层级结构是否严格匹配——差一层目录,就等于没缓存。










