离线环境无法自动回滚,必须设composer_disable_network=1并确保cache-files-dir正确配置、vendor已清理、目标zip包存在且权限可读,否则仍会尝试联网。

离线环境不能靠“断网”自动回滚
Composer 没有内置的离线回滚机制,所谓“回滚”在离线场景下本质是两件事:一是让 Composer 完全不尝试联网(否则必报 Could not fetch https://repo.packagist.org/packages.json),二是确保它能从本地已有资源中重建 vendor/ 和 autoloader。光靠删 vendor 或改 composer.json 版本号没用——composer install 默认仍会联网校验元数据。
-
COMPOSER_DISABLE_NETWORK=1是硬性前提,不设它,所有--no-xxx参数都无效 - 必须提前在线机完成完整缓存:显式配置
cache-files-dir并执行composer install --prefer-dist,否则离线机找不到 ZIP 包 - 如果
composer.lock里含"source"类型条目(如 Git URL、dev-master),离线时无法校验,install 必然失败 - 全局配置残留
repo.packagist会导致 fallback 校验,需运行composer config --global repo.packagist false彻底禁用
离线回滚依赖版本的唯一安全路径
想把 monolog/monolog 从 v2.10 退到 v2.9?别手动改 composer.json 后跑 composer update——那会触发全新依赖解析,可能连带升级其他包,且离线时直接卡死。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 先确认目标版本存在:
composer show -a monolog/monolog,检查 v2.9.2 是否未被标记为abandoned - 执行:
composer require monolog/monolog:^2.9 --with-all-dependencies,它会更新 lock 中该包及所有间接依赖项,比手动编辑安全 - 若报
Your requirements could not be resolved,运行composer why-not monolog/monolog:2.9.2查冲突来源 - 完成后必须删掉
vendor/并重跑composer install --no-plugins --no-scripts --no-autoloader,否则旧文件残留导致行为不一致
离线机上如何验证回滚是否生效
很多人以为 vendor/ 目录存在、lock 文件也完整,就代表回滚成功。其实不然——Composer 在 install 阶段仍会读取 cache-files-dir 下的 ZIP 包并校验 SHA256,路径错、权限错、目录空,都会静默 fallback 到重下,根本不会提示错误。
- 检查
composer diag输出中Cache files directory行是否和你设的一致,且末尾含/files - 确认该路径下存在对应 ZIP,例如:
/path/to/offline-cache/files/monolog/monolog/2.9.2.0/monolog-monolog-abc123.zip - PHP 进程用户(如
www-data)必须对整个/files目录有read+execute权限,否则stat()失败,Composer 就放弃缓存 - 运行
composer install --verbose,观察日志中是否出现Downloading https://.../monolog/monolog/2.9.2.0/...—— 出现即说明没走缓存,还在试图联网
Composer 自身版本降级在离线环境要手动覆盖
composer self-update --rollback 在离线机上不可用,v2.5.0+ 已禁用任意降级;composer self-update --1 也会因无法访问官网而失败。必须人工下载、校验、替换。
- 查当前位置:
which composer(常见为/usr/local/bin/composer) - 在联网机下载目标版本:
curl -sS https://getcomposer.org/download/2.1.14/composer.phar -o /tmp/composer.phar - 校验 SHA384:
shasum -a384 /tmp/composer.phar,与官网页面列出值比对 - 覆盖安装:
sudo mv /tmp/composer.phar $(which composer) && sudo chmod +x $(which composer) - 注意:
v2.1.x无法解析v2.7+生成的composer.lock,若 lock 是新版生成的,得先降级 lock 格式或换工具转换
/files 后缀、权限必须可被 PHP 进程用户访问、COMPOSER_DISABLE_NETWORK=1 必须前置导出——缺一不可,少一个环节,就会在静默中重新联网。










