离线环境执行 composer install 的核心是依赖 composer.lock 驱动、跳过网络请求:必须在联网机生成完整 vendor/ 和未修改的 composer.lock,整包拷贝至离线机;离线机执行 composer install 时仅校验 lock 文件与 vendor 一致性,匹配则显示“nothing to install or update”,任何网络提示均表明准备不全。

离线环境无法执行 composer install 或 composer require,核心原因是 Composer 默认依赖远程仓库(如 Packagist)实时解析和下载包。但只要提前在有网机器上完成“冻结式”准备,就能让离线机器跳过网络请求直接构建 vendor 目录。
离线前必须生成完整 vendor/ 目录
离线机器不运行任何 composer 命令——它只消费已存在的 vendor/。所以关键动作全在联网机器上完成:
- 确保项目根目录下有完整的
composer.json和composer.lock(composer.lock必须存在且未被修改,否则离线时 Composer 会尝试重新解析依赖) - 在联网机器上执行
composer install --no-dev(生产环境建议加--no-dev减少体积)或composer install(含开发依赖) - 确认
vendor/目录非空,且所有依赖包(包括嵌套依赖)都已解压到位,例如vendor/topthink/framework/、vendor/monolog/monolog/等路径真实存在 - 把整个项目(含
composer.json、composer.lock、vendor/)一起拷贝到离线机器,不要只复制vendor/单独目录
composer install 在离线机器上会做什么
离线机器执行 composer install 时,行为完全由 composer.lock 驱动,不是靠访问 Packagist:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Composer 读取
composer.lock中记录的每个包的 exact commit hash 或 version + dist URL - 如果
vendor/中对应包已存在且composer.lock版本匹配,Composer 直接跳过安装,输出类似Nothing to install or update - 如果某个包缺失,Composer 会报错
Package X is not installed,并终止 —— 这说明联网机器准备不全,不是网络问题 - 不会触发任何 HTTP 请求,
curl、openssl扩展是否启用、镜像源是否配置,全部无关
为什么不能只拷贝 vendor/ 而不带 composer.lock
单独拷贝 vendor/ 是常见误区,会导致离线机器上 composer install 失败或行为异常:
- 没有
composer.lock时,Composer 会退回到“依赖解析模式”,试图从composer.json重新计算版本,这必然触发网络请求去查 Packagist 元数据 - 即使你用
--ignore-platform-reqs强行跳过平台检查,依然需要远程元数据,离线环境下必报Connection refused或503 Service Unavailable -
composer.lock不仅锁定版本,还锁定 autoloader 映射、dist 文件校验和(dist.shasum),缺了它就失去离线确定性
遇到 require-dev 包干扰离线启动怎么办
有些框架(如 Yii2、Laravel)的 index.php 或启动脚本会无条件加载 vendor/autoload.php,而该文件由 Composer 自动生成,会包含 require-dev 中定义的类路径。若离线机器没装 dev 包,可能报 Class not found:
- 最稳妥做法:联网机器执行
composer install --no-dev,再拷贝整份项目 - 检查
vendor/autoload.php是否引入了 dev-only 的命名空间(比如phpunit、phpspec),如有,需确认应用启动逻辑不实际使用它们 - 若必须保留 dev 包(如调试工具),则离线机器也必须完整拷贝
vendor/(含 dev 包),并在composer.json中明确声明"minimum-stability": "stable"避免 dev 分支混入
离线成功的唯一标志是:在无网、无代理、无镜像源配置的机器上,执行 composer install 输出 Installing dependencies from lock file 后立即显示 Nothing to install or update,且不出现任何 curl、file_get_contents 或连接超时错误。任何网络相关提示都说明 composer.lock 缺失、损坏,或 vendor/ 不完整。










