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

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),但某些包只提供 source(Git 克隆)。离线时 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 在假装有网络。










