离线更新包不可行,但可通过预缓存依赖实现“伪离线”安装:需确保 composer.lock 存在且未修改,所有 dist 包已完整存在于 Composer 全局缓存中,并保持 PHP 与 Composer 版本一致。
离线更新包根本不可行,但可以“伪离线”完成 install
Composer 本身没有真正的离线模式,composer update 或 composer install 在运行时必须连接 Packagist(或你配置的镜像)来解析依赖、校验哈希、下载 ZIP 或 Git 元数据。所谓“离线更新”,实际是提前把所有依赖及其完整历史版本缓存好,再断网执行 composer install —— 这个操作只依赖本地 vendor/ 和 composer.lock,不发起网络请求。
关键前提是:composer.lock 文件必须已存在且未被修改;且所有 dist 包(ZIP/TAR)已完整存在于 Composer 全局缓存中。
- 运行过一次
composer install或composer update的机器,其缓存路径(如~/.composer/cache/files/)里会存下所有下载过的包 ZIP - 缓存目录可整体拷贝到目标离线机的对应路径(注意用户权限和路径一致性)
- 确保离线机上 PHP、Composer 版本与原环境一致,否则可能因
composer.lock中的platform或content-hash不匹配而拒绝安装
如何导出完整依赖包供离线部署
用 composer archive 只打包当前项目,不包含依赖;真正可行的是用 composer install --no-dev --prefer-dist --dry-run 配合脚本提取所有 dist URL,再用 wget 或 curl 批量下载——但更可靠的是直接复用 Composer 自身缓存。
推荐做法: