composer如何在无外网服务器上初始化vendor目录?

1次阅读

离线服务器上 composer install 报错是因为默认从 packagist.org 拉包且无本地 fallback;必须提前在有网机执行 composer install –no-dev –prefer-dist 生成 vendor 和 lock 文件,确认无在线 repo 配置,再整传 vendor 和 lock 到离线机,运行时仅需 –ignore-platform-reqs(php 版本不一致时)。

composer如何在无外网服务器上初始化vendor目录?

为什么 composer install 在离线服务器上直接报错?

因为默认行为会去 packagist.org 拉包,连不上就卡在 Could not fetch https://repo.packagist.org/packages.json 或类似错误。离线环境不是“没网就能跳过”,而是 Composer 根本不尝试本地 fallback——它压根不知道你有缓存。

必须提前在有网机器上做三件事

缺一不可,顺序也不能乱:

  • composer install --no-dev --prefer-dist 在有网机器上完整生成 vendor/composer.lock
  • 确认项目里没写死在线 repo(检查 composer.json 里有没有 "repositories" 指向 https 地址)
  • 把整个 vendor/ 目录 + composer.lock 打包传到离线服务器,不要只传 composer.lock 然后指望 composer install 自己拉

composer install 在离线服务器上要加什么参数?

只加一个:--ignore-platform-reqs(如果离线机 PHP 版本和开发机不一致),其他参数全是干扰项:

  • --no-scripts:可选,避免执行 require 的 post-install-cmd 脚本(比如生成 autoload)
  • --no-plugins:可选,防止插件试图联网(比如某些私有 repo 插件)
  • 绝对不要加 --prefer-source--dev:前者会触发 git clone,后者可能激活需要联网的 dev-only 包

最终命令通常是:composer install --no-dev --ignore-platform-reqs

vendor 目录传过去后还报 autoload 错误?

常见于没传全或权限不对:

  • 检查 vendor/autoload.php 是否存在且可读(PHP 进程用户要有读权限)
  • 确认 vendor/composer/autoload_*.php 文件没被压缩工具意外损坏(尤其用 windows 打 zip 再传 linux
  • 如果用的是自定义 autoloader(比如 PSR-4 映射到 src/),确保 composer dump-autoload 已在有网机执行过,且 vendor/composer/autoload_static.php 已生成

离线部署最麻烦的从来不是 Composer 命令本身,而是人以为“锁文件有了,vendor 就能活”,结果漏传了一个 autoload 文件,或者 tar 解压时丢了执行位。

text=ZqhQzanResources