离线安装 composer 需准备三类文件:composer.phar(指定版本)、完整 vendor/ 目录及 composer.lock、本地 packagist 镜像(含 packages.json 与各包 zip);执行时须加 --no-plugins --no-scripts --ignore-platform-reqs 参数,并配置本地 http 仓库及禁用 secure-http。

离线安装 Composer 需要提前准备哪些文件
没网络时,composer.phar 本身不是唯一依赖——它运行时会去 https://repo.packagist.org 拉包元数据、下载 ZIP、校验哈希,这些全得本地化。所以光拷一个 composer.phar 进内网,执行 composer install 会立刻报 cURL error 7: Failed to connect 或 Could not fetch packages.json。
必须打包三类东西:
-
composer.phar(建议用curl -sS https://getcomposer.org/installer | php -- --filename=composer.phar --version=2.7.7提前下好指定版本) - 完整项目
vendor/(含所有已装包的源码 +composer.lock) - 离线仓库镜像:用
composer archive或第三方工具(如packagist-mirror)导出packages.json和各包 ZIP 的本地映射
用 composer install --no-plugins --no-scripts 跳过联网环节
很多用户以为只要 composer install 有 vendor/ 和 composer.lock 就能离线跑通,结果卡在插件激活或脚本执行上——比如 phpstan/extension-installer 会尝试连 Packagist 查新版本,symfony/flex 会调 API 获取 recipe。
强制跳过这些环节才真正“离线”:
-
--no-plugins:禁用所有插件(包括自动加载器注册、recipe 应用等) -
--no-scripts:不执行post-install-cmd等定义在composer.json中的命令 - 加上
--ignore-platform-reqs防止因 PHP 版本/扩展缺失导致中断(内网环境常有老系统)
典型命令:php composer.phar install --no-plugins --no-scripts --ignore-platform-reqs
把 packagist.org 镜像成本地 HTTP 服务才可靠
单纯复制 vendor/ 只解决“已有包”,一旦要 require 新包或更新依赖,没镜像就彻底走不通。最稳的方式是起一个本地 HTTP 服务,让 Composer 认为它还在连官方源。
推荐用 php -S 快速搭个静态服务(无需 Apache/Nginx):
- 先用
composer archive导出完整镜像到/path/to/mirror(含packages.json、provider-*.json、各包 ZIP) - 运行:
php -S localhost:8000 -t /path/to/mirror - 在目标机器的
composer.json里加仓库配置:{"repositories": [{"type": "composer", "url": "http://localhost:8000"}]}
注意:Composer 默认只信任 HTTPS 源,若用 HTTP 必须加 "secure-http": false 到全局 config(composer config -g secure-http false),否则报 Repository is not secure 错误。
Windows 下路径空格和反斜杠会让离线流程失败
内网机器常是 Windows Server,而 Composer 对路径处理很敏感——尤其是 composer.phar 解包时遇到带空格的路径(如 C:\Program Files\PHP)会静默失败,错误信息只显示 Failed to extract,没具体原因。
实操避坑点:
- 所有路径避免空格,PHP 安装目录建议用
C:\php而非默认向导路径 - 统一用正斜杠
/(Composer 内部解析逻辑对\支持不稳定) - 检查
COMPOSER_HOME环境变量是否指向含空格路径,可临时设为C:/temp/composer - 如果用批处理脚本分发,确保
%~dp0展开后不含引号或空格
离线场景下,任何路径异常都会被放大成“找不到包”或“解压失败”,但错误提示极其模糊,得从路径入手逐层排查。










