composer怎么在离线环境中添加新包?

1次阅读

离线执行 composer require 必然失败,正确做法是在联网机器用 composer install 生成 vendor/ 和 composer.lock,再整体打包至离线机,运行 composer install –no-dev –ignore-platform-reqs;需确保 lock 文件存在、vendor 干净、php 环境兼容,私有包必须提前纳入 vendor 快照。

composer怎么在离线环境中添加新包?

离线环境执行 composer require 会直接失败

因为默认行为是去 Packagist 拉取元数据和 ZIP 包,没网络就卡在 Could not fetch packagesConnection refused。离线时不能指望 Composer 自己“猜”出依赖树或下载路径。

必须提前在有网机器上导出完整依赖快照

核心思路不是“离线安装”,而是“把在线环境的安装结果完整搬过去”。关键命令是 composer install --no-dev --prefer-dist --dry-run 配合 composer archive 或手动打包。

  • 先在联网机器用目标 composer.json 运行 composer install,生成完整的 vendor/ 和锁文件 composer.lock
  • composer archive 打包指定包(如 composer archive monolog/monolog 2.9.1),但注意它只打单个包,不处理依赖链
  • 更稳妥的做法:直接压缩整个 vendor/ 目录 + composer.lock,到离线机解压后运行 composer install --no-dev --ignore-platform-reqs
  • 如果离线机 PHP 版本或扩展不同,--ignore-platform-reqs 能绕过检查,但得自己确认兼容性

composer install 离线运行前必须检查三件事

少一个都会中断:锁文件存在、vendor 目录干净、PHP 环境匹配。

  • composer.lock 必须存在且和 composer.json 一致——删掉 lock 文件再离线运行 install 会报 No composer.lock file present
  • 离线机的 vendor/ 要么不存在,要么完全删除;残留旧包会导致 autoload 冲突或类找不到
  • 扩展依赖(如 ext-gd)若缺失,composer install 可能不报错,但运行时才崩——建议离线前在联网机用 composer check-platform-reqs 记下要求

私有包或 VCS 包在离线时根本不可用

"my/private-package": "dev-main" 这种指向 git 仓库的配置,在离线环境下 composer install 会卡死在 Cloning into...。没有折中方案,必须提前把这类包也打进 vendor 快照里。

  • VCS 包无法用 composer archive 处理,只能靠完整 vendor 打包
  • 私有 Packagist 镜像(如 Satis)同样需要离线机网络可达——如果镜像服务本身也离线,那就彻底不可用
  • 替代办法:把私有包源码按 PSR-4 结构放进项目 src/,改 autoload,绕过 Composer 包管理

离线加包这件事,本质是“把构建过程前置”,不是“让 Composer 学会断网工作”。最容易被忽略的是锁文件和 vendor 的耦合关系——很多人以为只要拷贝 vendor 就行,结果忘了 lock 文件版本不匹配,导致 autoload.php 生成错误或依赖解析失败。

text=ZqhQzanResources