离线安装成功需确认三件事:1. 目标机php版本与扩展须与打包环境一致;2. composer.lock必须存在且未修改;3. 所有依赖包须已完整下载并缓存。
离线安装依赖前必须确认的三件事
离线安装不是简单把 vendor 文件夹拷过去就能跑通——Composer 会校验包完整性、检查平台约束、解析依赖图,缺一不可。离线能成功,前提是「环境一致性」和「元数据完整」。
- 目标机器 PHP 版本、扩展(如
openssl、json)必须与打包环境一致,否则composer install会在 autoload 生成或脚本执行阶段直接报错 -
composer.lock文件必须存在且未被修改,它是离线安装的唯一权威依据;没有它,composer install会退化成composer update,触发联网行为 - 所有依赖包(含
dist和source)必须已通过composer install --no-dev或--with-all-dependencies完整下载并缓存,仅靠本地vendor目录不够
用 composer install --no-interaction --no-plugins --no-scripts 确保纯离线执行
默认 composer install 可能触发插件(如 hirak/prestissimo)、执行 post-install-cmd 脚本,甚至尝试连 Packagist 检查更新——这些都会在离线时卡死或报错。
-
--no-interaction:禁用任何交互式提示(比如认证询问),避免卡住 -
--no-plugins:跳过所有插件,防止插件内部发起 HTTP 请求 -
--no-scripts:不执行post-install-cmd等脚本,常见于生成 autoload、清缓存等操作,它们可能依赖外部工具或网络 - 务必配合
-v(verbose)运行一次,观察是否仍有Downloading或Fetching日志——有就说明某处仍试图联网
备份和恢复 Composer 全局缓存才是可靠离线方案
只拷 vendor 和 composer.lock 是脆弱的:不同系统路径权限、符号链接、Windows/macOS/类 Unix 下的 autoload_static.php 生成逻辑都可能出问题。真正可迁移的离线包,是 Composer 自己管理的缓存目录。