离线安装 Composer 依赖的核心是预下载 dist 包并复用缓存:在联网机配置镜像、执行 --prefer-dist 安装触发缓存,同步 ~/.composer/cache 到离线机,确保 composer.lock 一致,并禁用网络(如设 repos.packagist 为无效地址)后运行 install。

在离线环境中安装 Composer 依赖,核心思路是:提前在有网络的机器上下载好所有依赖包(含源码和 dist 归档),再将这些资源同步到目标离线机器,最后通过本地路径或缓存机制让 composer install 跳过远程请求。
用 --prefer-dist + packagist-mirror 提前拉取归档
--prefer-dist 会让 Composer 优先使用压缩包(如 .zip/.tar.gz)而非 Git 克隆源码,这类包体积小、下载快、适合缓存。关键在于:这些 dist 包默认从 packagist.org 或镜像站下载,所以需在联网机器上模拟离线场景完成预热。
- 在联网机器上,先配置国内镜像(如阿里云)加速:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 运行
composer install --prefer-dist --no-scripts --no-autoloader(或composer update --prefer-dist),确保vendor/下所有包以 dist 方式安装 - Composer 会把下载的 dist 包自动存入全局缓存目录(可通过
composer config --global cache-dir查看,默认如~/.composer/cache/files/),每个包按 vendor/name-hash 存放,结构清晰可复制
把缓存目录完整同步到离线机器
Composer 在安装时会自动检查缓存目录是否有对应 hash 的 dist 包;若命中,就直接解压,不发起网络请求。因此只需把整个缓存目录拷贝过去即可复用。
- 打包缓存:
tar -czf composer-cache.tgz -C ~/.composer/cache . - 复制到离线机后解压到对应位置(注意用户权限一致):
sudo tar -xzf composer-cache.tgz -C /root/.composer/cache(若为 root 用户)或tar -xzf composer-cache.tgz -C $HOME/.composer/cache - 确认离线机上的
composer.json和composer.lock与联网机完全一致(尤其是 lock 文件中的dist.shasum字段),否则缓存无法匹配
禁用网络请求,强制走本地缓存
即使缓存就绪,Composer 默认仍会尝试连接 packagist 检查元数据更新。需显式关闭网络行为,避免报错中断。
- 设置环境变量屏蔽网络:
export COMPOSER_NO_INTERACTION=1 && export COMPOSER_DISABLE_TLS=1(后者仅当 HTTPS 验证失败时临时用) - 运行安装命令时加
--no-plugins --no-scripts --no-autoloader减少潜在网络调用点 - 更彻底的方式:临时修改 Composer 配置,指向一个不存在的仓库(迫使它只查缓存):
composer config --global repos.packagist '{"type":"composer","url":"https://none.example.com"}',安装完再改回来
备用方案:用 composer archive 打包全量依赖
若缓存同步不可靠(如跨平台、权限混乱),可将整个 vendor/ 目录打包,作为“离线 vendor”直接部署。
- 在联网机完成
composer install --prefer-dist后,压缩:tar -czf vendor-offline.tgz vendor/ - 离线机解压到项目根目录:
tar -xzf vendor-offline.tgz - 注意:该方式跳过 Composer 安装流程,不生成 autoload,需手动运行
composer dump-autoload(但此命令不联网,仅生成 PHP 类映射) - 适合 CI/CD 流水线中固定环境交付,不适合需要频繁更新单个包的场景










