composer怎么离线安装_composer无网络环境教程【应急】

3次阅读

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

composer怎么离线安装_composer无网络环境教程【应急】

离线安装 Composer 需要提前准备哪些文件

没网络时,composer.phar 本身不是唯一依赖——它运行时会去 https://repo.packagist.org 拉包元数据、下载 ZIP、校验哈希,这些全得本地化。所以光拷一个 composer.phar 进内网,执行 composer install 会立刻报 curl Error 7: Failed to connectCould 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 installvendor/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.jsonprovider-*.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 FilesPHP)会静默失败,错误信息只显示 Failed to extract,没具体原因。

实操避坑点:

  • 所有路径避免空格,PHP 安装目录建议用 C:php 而非默认向导路径
  • 统一用正斜杠 /(Composer 内部解析逻辑对 支持不稳定)
  • 检查 COMPOSER_HOME 环境变量是否指向含空格路径,可临时设为 C:/temp/composer
  • 如果用批处理脚本分发,确保 %~dp0 展开后不含引号或空格

离线场景下,任何路径异常都会被放大成“找不到包”或“解压失败”,但错误提示极其模糊,得从路径入手逐层排查。

text=ZqhQzanResources