离线安装composer依赖必须设置composer_disable_network=1,否则即使vendor完整、镜像已配、缓存齐全,仍会因默认联网校验packages.json而失败;需绑定cache-files-dir路径与composer.lock中dist.shasum精确匹配,并在离线后执行composer dump-autoload -o。

COMPOSER_DISABLE_NETWORK=1 不是可选项,是离线前提的硬性开关。镜像源本身不提供离线能力,它只加速联网下载;所谓“离线同步”,本质是复用已缓存的包 + 切断网络通路 + 精准匹配 composer.lock 中的 dist.shasum。
为什么镜像配置了还报 Could not fetch packages.json
因为镜像只改下载地址,不改行为逻辑——Composer 默认仍会请求 packages.json 校验元数据。没设 COMPOSER_DISABLE_NETWORK=1,哪怕 vendor 目录完整、缓存齐全,也会在解析阶段卡住或失败。
- 验证是否生效:
env | grep COMPOSER_DISABLE_NETWORK必须输出COMPOSER_DISABLE_NETWORK=1 - Windows CMD 下必须用
set COMPOSER_DISABLE_NETWORK=1 && composer install,PowerShell 要先赋值再执行 -
--no-plugins --no-scripts --no-autoloader这些参数在未设该环境变量时完全无效
cache-files-dir 和缓存路径必须手动对齐
cache-files-dir 是唯一能被 --prefer-dist 直接读取的缓存子目录,其他如 repo/ 或 archived/ 断网即失效。离线机和联网机构建机必须使用**完全一致的路径**,且路径不能含中文或空格。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 联网机上设固定路径:
composer config --global cache-files-dir /opt/composer-cache/files - 离线机同步前确认该路径存在、可读、权限正确(尤其 Docker 容器内需挂载对应 volume)
- 检查关键包是否存在:
find /opt/composer-cache/files -name "*7a8e0d4b*.zip"(7a8e0d4b是composer.lock里某包dist.shasum前 8 位)
composer.lock 与缓存必须严格匹配
Composer 不模糊查找 zip 包,它按 dist.shasum 值精确匹配文件名。若缓存中缺失任一哈希对应的 zip,就会报 Package not found,而不是提示“缓存不全”。
- 联网机执行前加
--prefer-dist,确保所有包走 zip 下载而非 git clone(source 类型无法进files/) - 两端 Composer 主版本需一致(如都是 2.7.x),否则缓存结构不兼容,
files/下文件命名规则可能不同 - 别依赖
composer clear-cache:它不清理repo/下的元数据,也不保证重下 zip;真正有效的是删掉cache-files-dir后重新install --prefer-dist
离线安装后 autoload 仍会失败?补这一句
composer install 在 COMPOSER_DISABLE_NETWORK=1 下跳过 autoloader 生成,所以即使 vendor 存在,运行时仍报 Class not found。
- 必须额外执行:
composer dump-autoload --optimize - 该命令纯本地操作,不联网,但要求
vendor/autoload.php已存在(即 vendor 目录已就位) - 若项目含自定义 PSR-4 映射,建议提前在联网机上跑一次完整
dump-autoload -o,再打包 vendor
COMPOSER_DISABLE_NETWORK=1 控制行为、cache-files-dir 指定包位置、composer.lock 提供哈希清单。最容易被忽略的是第一项——它不写进配置文件,不靠命令持久化,每次运行都得显式带上。










