composer怎么导出所有依赖供离线使用?

3次阅读

composer不支持–no-install-recommends;离线部署需提前用composer archive在vendor目录下批量打包依赖zip,并确保composer.lock完整、全量使用dist源,再通过禁用packagist和清空缓存实现纯离线安装。

composer怎么导出所有依赖供离线使用?

composer install –no-install-recommends 不起作用?别用这个

这个参数根本不存在,composer install 压根不支持 --no-install-recommends。它不是 apt,别被类比误导。真正要离线部署,核心不是“跳过推荐包”,而是提前把所有依赖的完整 ZIP 包和元数据一起拉下来。

怎么用 composer archive 把所有依赖打包成离线包?

composer archive 是个冷门但管用的命令,但它默认只打当前项目,不包含 vendor 里的依赖源码。正确做法是先确保 vendor/ 已完整安装(联网执行一次 composer install --no-dev),再进 vendor/ 目录挨个归档:

  • vendor/ 目录后,运行 composer archive --format=zip --dir=../offline-vendor-zips/ *
  • 注意:必须加 *,否则只打当前目录(即 vendor 自身)
  • 生成的 ZIP 名类似 monolog-monolog-2.9.1.zip,含完整源码+composer.json
  • 别漏掉 composer.lock —— 它是离线还原版本一致性的唯一依据,必须一并复制走

离线机器上怎么让 composer install 不联网?

关键不是关网络,而是让 Composer 主动拒绝访问 packagist.org。靠的是两个配置组合:

  • 在离线机器的项目根目录下,创建 composer.json 并写入:
    {"repositories": [{"type": "package", "package": []}]}
  • 执行 composer install --no-plugins --no-scripts,跳过任何可能触发网络请求的扩展或脚本
  • 如果报错 Could not fetch https://packagist.org/packages.json,说明还有地方漏了 —— 检查是否清空了 ~/.composer/cache/(旧缓存可能含过期 URL)
  • 更稳的做法:用 composer config -g repo.packagist false 全局禁用 packagist(需提前在离线机上执行)

为什么 vendor 里有些包没 ZIP、只有 dist.tar?

Composer 默认优先用 dist(预编译 ZIP/TAR),但某些包只提供 sourcegit 克隆)。离线时 source 会失败,因为没 Git 也没网络。解决方法:

  • 联网机器上执行 composer install --prefer-dist,强制走 dist 渠道
  • 检查 composer.lock 里每个包的 "dist" 字段是否存在且 "url" 可访问
  • 若某包只有 "source",去 Packagist 页面看它是否标记为 “abandoned” 或换仓库了 —— 这种包大概率没法离线用
  • 临时方案:手动下载对应 dist ZIP,放到 ~/.composer/cache/files/ 对应 hash 目录下(路径可从 composer show -s vendor/name 查)

最麻烦的不是打包,是 lock 文件里混着 source 和 dist 来源;一旦漏检,离线 install 就卡在第一个 source 包上,错误信息还特别模糊 —— Failed to clone ...,其实根本没在克隆,只是 Composer 在假装有网络。

text=ZqhQzanResources