不能靠改cache-dir实现离线安装,真正起作用的只有cache-files-dir,因cache-dir是混存repo/、archived/、files/的混合目录,断网时仅files/下的zip包可复用;cache-files-dir专控该子目录,配合--prefer-dist下载并迁移完整files/结构,才能确保离线生效。

不能靠改cache-dir实现离线安装,真正起作用的只有cache-files-dir,且必须配合--prefer-dist和完整缓存目录迁移。
为什么cache-dir配置了也离不了线
Composer 的 cache-dir 是个混合目录,里面混着 repo/(元数据)、archived/(解压后归档)、files/(原始 dist zip)。断网时只有 files/ 下的 ZIP 包能被复用,其他子目录全失效。
-
cache-dir被设成/dev/null或只读路径 → 缓存写不进去,日志里常静默失败 - 项目级配置写了
"config": { "cache-dir": false }→ 全局缓存直接被禁用 - CI 脚本没挂载持久卷,或漏设
COMPOSER_CACHE_DIR→ 每次构建都是空缓存 - PHP 进程用户(如
www-data)对~/.composer/cache无写权限 → 不报错但 ZIP 包根本没生成
cache-files-dir才是离线唯一该配的路径
这个配置项专为离线设计,只控制 files/ 子目录位置,不干扰 repo/ 或 archived/。一旦设好,composer install --prefer-dist 就会把所有下载的 ZIP 包强制写进该路径,方便打包带走。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先清旧配置:
composer config --global --unset cache-dir(避免冲突) - 设新路径:
composer config --global cache-files-dir /path/to/offline-cache - 触发下载:
composer install --no-autoloader --no-scripts --prefer-dist - 验证是否生效:检查目标路径下是否有类似
monolog/monolog/2.10.0.0/monolog-monolog-6a8c4b5.zip的结构
离线机上执行 install 前必须做三件事
光有缓存 ZIP 不够,路径、锁文件、参数三者缺一不可。
- 确保
composer.lock已存在且未被手动修改(内容哈希必须与composer.json匹配) - 在离线机显式配置缓存路径:
composer config --global cache-files-dir /path/to/offline-cache,否则 Composer 默认仍查原路径(可能为空) - 执行命令时必须带
--prefer-dist,否则它会尝试走source(git clone),而files/里根本没有源码包 - 加
--no-plugins --no-scripts --no-interaction防止插件或脚本触发网络请求
最容易被忽略的是:缓存 ZIP 包本身不是瓶颈,而是 files/ 目录是否被精准挂载、是否在 CI 中用 hashFiles('**/composer.lock') 作缓存 key —— 错一个字符,整个离线流程就卡在 “Package not found”。

















