能,composer show 本身不依赖实时网络,只要 vendor/composer/installed.json 文件存在且有效,即可离线列出已安装包;该文件由 composer install/update 生成,是当前 vendor 包的元数据快照。
composer
show 不联网能用吗
能,但得提前做好准备——
本身不依赖实时网络,但它会尝试读取
。只要这个文件存在且没被删,离线时也能列出已安装包。
常见错误现象:
报错
,其实是它误判了网络状态,或者
损坏/缺失;不是命令本身必须联网。
确保项目已执行过至少一次
或
(生成
)
别手动删
下的元数据文件
如果用了
或
,
不会生成,离线就真看不到列表了
离线时如何确认 installed.json 是否可用
直接检查文件是否存在、是否可读,比猜更可靠。这个文件是 Composer 安装后写入的“快照”,内容就是当前 vendor 里所有包的 name/version/type 等信息。
使用场景:CI 构建后打包镜像、内网服务器部署、飞行模式调试。
运行
,确认文件存在且大小 > 0
用
快速看前几行是否是合法 JSON
如果项目用的是 Composer 2.x,还可能有
(二进制缓存),但
命令默认仍走 JSON
composer show 的常用离线参数组合
离线时别乱加参数——有些选项会触发远程请求,比如
或
(后者在某些旧版本会尝试查 lock 文件外的包)。
Composer 2.9.6
Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。
下载
安全、真正离线可用的组合只有这几个:
:列出全部已安装包(name + version)
:只看 PHP 扩展和平台包(如
),完全不碰 vendor
:查单个包详情(只要它在
里就有)
避免用
(已废弃)、
(部分版本仍会联网校验)
为什么有时候离线 show 会卡住或报错
不是网络问题,而是 Composer 在初始化阶段做了隐式行为:比如读取全局配置、检查 CA 证书路径、甚至尝试访问
(哪怕只是 stat())。这些在无网络但文件系统正常的机器上不该失败,但某些容器环境或权限收紧的系统会暴露问题。
性能与兼容性影响:Composer 1.10+ 对离线响应做了优化,但若
指向一个不可写的路径,它可能反复重试写日志,造成假卡顿。
临时解决:加
(非交互)和
避免插件触发额外逻辑
终极保险:用
绕过 Composer 二进制
注意 Windows 上路径分隔符和权限问题,
可能被防病毒软件锁定
最易被忽略的一点:
文件存在 ≠
存在。lock 是声明,installed.json 是事实——没 install 过,离线就真没得 show。
composer showvendor/composer/installed.jsoncomposer showCould not fetch packages informationinstalled.jsoncomposer installcomposer updatevendor/composer/installed.jsonvendor/composer/--no-install--dry-runinstalled.jsonls -l vendor/composer/installed.jsoncat vendor/composer/installed.json | head -n 5installed.phpshow--outdated--treecomposer showcomposer show --platformext-curlcomposer show monolog/monologinstalled.json--all--direct~/.composer/auth.jsonCOMPOSER_HOME-n--no-pluginsphp -r "echo json_encode(json_decode(file_get_contents('vendor/composer/installed.json'), true), JSON_PRETTY_PRINT);"installed.jsoncomposer.lockinstalled.json