断网安装前必须确认缓存齐全:运行composer show --all | grep "vendor/name"检查dist字段,再核实~/.composer/cache/files/(Linux/macOS)或%APPDATA%\Composer\Cache\files\(Windows)中存在对应版本的.zip/.tar文件。

断网安装前必须确认哪些依赖已缓存
Composer 断网安装(composer install --no-network)不是“随便断网就能跑”,它只用本地已有的 vendor/、composer.lock 和 ~/.composer/cache/ 中的包归档(.zip/.tar)或 dist 文件。如果某包没被缓存过,命令会直接报错:Package vendor/name could not be found in any version。
验证缓存是否齐全,最可靠方式是:
- 运行
composer show --all | grep "vendor/name"—— 若输出含dist字段(如dist : {"type":"zip","url":"https://api.github.com/..."}),说明该包的 dist 归档曾被下载并缓存 - 检查
~/.composer/cache/files/vendor/name/下是否存在对应版本的.zip或.tar文件(Linux/macOS);Windows 路径为%APPDATA%\Composer\Cache\files\vendor\name\ - 若用过
composer update且未加--no-cache,通常已有缓存;但首次composer install后立刻断网,大概率失败——因为install默认不预取 dist,只解压 lock 里记录的路径
执行断网安装时的关键参数和错误信号
--no-network 是唯一强制禁用网络的开关,但它不会跳过所有联网检查:Composer 仍会尝试读取 composer.lock、校验签名、加载插件等。常见失败点不是“连不上网”,而是“找不到本地资源”。
真正有用的组合是:
-
composer install --no-network --ignore-platform-reqs:绕过 PHP 扩展/版本检查(常因断网时无法 fetch platform info 而卡住) -
composer install --no-network -v:看日志中是否出现Downloading ... from cache,而非Downloading ... from https://... - 若报错
Could not parse version constraint ...: Invalid version string,说明composer.lock里某个包的source或dist字段损坏,需从有网环境重新生成 lock
验证安装结果是否真为“断网构建”
光看 vendor/ 目录存在不等于成功——可能上次有网时已装好,这次只是重装。要确认本次确实是离线完成的:
- 运行
ls -la vendor/后观察修改时间,应与你执行composer install --no-network的时间一致(Linux/macOS);Windows 可用dir vendor看日期 - 检查
composer.lock的content-hash是否与上次有网安装时一致;如果不一致,说明 lock 被意外更新过,本次不是纯断网流程 - 最关键的证据:在执行命令前临时清空 DNS 缓存(
sudo systemd-resolve --flush-caches或ipconfig /flushdns),再禁用网卡或拔网线,然后运行命令——若全程无超时、无curl error 7或Could not resolve host,才算真正离线通过
path 依赖在断网下是否可用
path 类型本地依赖("type": "path")天然不依赖网络,但断网时容易暴露配置缺陷:
- 若
vendor/name是 path 依赖,运行ls -la vendor/vendor/name必须看到->指向绝对路径;否则 Composer fallback 到 copy 模式,而 copy 行为在断网时无法触发(因需先解析 source) - path 包自身的
composer.json若含"require": {"some/remote-package": "^1.0"},断网时会直接失败——Composer 不检查该子依赖是否缓存,而是直接尝试解析 - 断网 + path 依赖下,
composer dump-autoload -o仍可运行,但若 autoload 映射指向了未缓存的远程包类,运行时仍会报Class not found
断网安装真正的难点不在命令本身,而在于对缓存状态、lock 文件完整性、以及 path 依赖链中任意一环是否“完全本地化”的判断——这些细节不显式报错,却决定成败。











