必须显式设置COMPOSER_DISABLE_NETWORK=1环境变量才能启用离线模式,因Composer无--offline参数或config配置可替代;未设此变量时,所有命令仍强制请求https://repo.packagist.org/packages.json导致失败。

没有“全局离线模式”这个配置项,Composer 的离线行为必须靠环境变量 COMPOSER_DISABLE_NETWORK=1 显式触发,且它不区分全局或局部——设了就对所有后续命令生效。
为什么不能靠 config 或 --offline 参数实现离线?
Composer 根本没有 --offline 参数,composer config --global 也改不出离线能力。所有看似“跳过网络”的配置(比如 secure-http false、repo.packagist false)都只影响请求策略,不阻止元数据校验阶段的 HTTPS 调用。只要没设 COMPOSER_DISABLE_NETWORK=1,composer install 就一定会尝试 GET https://repo.packagist.org/packages.json,失败报错是 Curl error 60 还是 Could not resolve host,只取决于你断网方式,结果一样:中断。
COMPOSER_DISABLE_NETWORK=1 必须提前设置,且生效范围极广
这个环境变量是硬开关,不是可选优化:
- Linux/macOS:在 shell 中执行
export COMPOSER_DISABLE_NETWORK=1,或写入~/.zshrc;临时使用可直接前缀命令:COMPOSER_DISABLE_NETWORK=1 composer install - Windows CMD:
set COMPOSER_DISABLE_NETWORK=1;PowerShell:$env:COMPOSER_DISABLE_NETWORK="1" - 它对
composer install、composer update、composer require全部生效,包括全局命令(如composer global install) - 一旦设了,所有插件、脚本、仓库配置都会被绕过——不是“建议不联网”,而是“根本不构造任何 HTTP 请求”
离线时还报 SSL 错误?说明根本没进离线逻辑
如果你已设 COMPOSER_DISABLE_NETWORK=1,却仍看到 SSL certificate problem 或 cURL error 60,那只有一个解释:Composer 还在发 HTTPS 请求,意味着该变量没生效。
- 检查是否漏了
--no-plugins:某些插件(如phpstan/extension-installer)会在--no-plugins外部触发网络调用,所以这个参数不是可选,是必须 - 确认没残留镜像配置:
composer config --global repo.packagist若返回https://mirrors.aliyun.com/composer/,必须运行composer config --global repo.packagist false彻底禁用 - 验证是否真被读取:
composer diag输出中应明确出现Disabled network: true
真正麻烦的点不在怎么设,而在于:它不解决 composer.lock 里含 "source": {"type": "git"} 的情况——这种锁文件天生不支持离线,install 必然失败。离线前得先确保 lock 文件全由 dist 来源构成。











