composer怎么在无网络连接下使用已缓存的包?

4次阅读

composer离线安装需显式启用–offline并确保缓存完整:检查cache-dir下repo和dist目录是否存在对应packages.json及.zip包,配置composer_cache_dir为全英文无空格路径,配合–no-interaction和–prefer-dist使用。

composer怎么在无网络连接下使用已缓存的包?

composer install 时提示 Could not fetch packages 怎么办

没网络时,composer install 默认会尝试连 Packagist,哪怕本地有缓存也失败。根本原因不是缓存不存在,而是 Composer 默认不启用离线模式,也不检查本地镜像或已下载的 zip 包。

实操上必须显式告诉它“别联网”,靠两个关键配置:

  • --no-interaction--prefer-dist(确保走压缩包而非 git clone)
  • 提前设置 COMPOSER_CACHE_DIR 指向你确认有内容的缓存目录(比如 ~/.composer/cache
  • 运行前执行 export COMPOSER_NO_INTERACTION=1,避免卡在交互提示

如何验证缓存里真有需要的包

Composer 缓存不是“用了就留”,而是按 vendor/package-name/version 结构存压缩包和元数据。没网络时,光有 vendor/ 目录没用——那是安装结果,不是缓存源。

检查缓存是否可用,直接看这个路径是否存在且非空:

$(composer config cache-dir)/repo/https---packagist.org/

里面应该有 packages.json 和按 vendor 名分的子目录;再进 dist/ 子目录,应能看到 .zip 文件。如果这些是空的或压根没生成过,composer install --offline 一定会报错。

composer install --offline 的真实行为边界

--offline 不是万能开关:它只跳过远程元数据更新和 dist 下载,但依然会读取本地缓存中的 packages.json.zip。一旦缓存缺失某包的 dist 文件,或者 lock 文件里指定了一个你从没装过的版本,它立刻失败,不会退化到其他策略。

  • 必须确保 composer.lock 是之前联网时生成的,且未被手动修改
  • 不能在 --offline 下执行 composer update —— 它会直接报错退出
  • PHP 扩展依赖(如 ext-curl)检查仍会运行,跟网络无关,但缺扩展照样中断

windowsCOMPOSER_CACHE_DIR 容易错在哪

Windows 用户常把缓存路径设成带空格或中文的目录(比如 C:Users张三AppDataRoamingComposerCache),导致 composer install --offline 静默跳过缓存,转而报网络错误。

根本原因是 Composer 内部某些路径拼接逻辑对空格和非 ASCII 字符处理不稳。最稳妥做法是:

  • composer config --global cache-dir D:/composer-cache 显式重定向
  • 确认该路径全英文、无空格、有读写权限
  • 运行前执行 set COMPOSER_CACHE_DIR=D:composer-cache(cmd)或 $env:COMPOSER_CACHE_DIR="D:composer-cache"(PowerShell)

离线场景下,缓存路径的“可预测性”比“符合默认习惯”重要得多——多一次手动配置,少半天排查。

text=ZqhQzanResources