必须设COMPOSER_DISABLE_NETWORK=1,否则composer install必请求https://repo.packagist.org/packages.json而失败;该变量是硬性开关,强制跳过所有HTTP请求,配合--no-plugins、--no-scripts、--no-autoloader及dump-autoload -o方可离线成功。

必须设 COMPOSER_DISABLE_NETWORK=1,否则 composer install 一定会去请求 https://repo.packagist.org/packages.json 并卡住或报错——这不是网络问题,是 Composer 默认行为强制校验远程元数据。
为什么 vendor 存在还报 Could not fetch packages.json
错误不是因为文件缺失,而是 Composer 在 install 阶段仍会主动加载仓库元数据、校验包存在性、检查 dist URL 可达性。这些动作默认触发 HTTP 请求,且无法被 --no-plugins 或 --no-scripts 等参数绕过。
-
COMPOSER_DISABLE_NETWORK=1是硬性开关,它让整个依赖解析流程跳过所有 HTTP 请求,包括仓库加载、包查询、dist 校验 - 不设这个变量,哪怕
vendor/和composer.lock都完整,命令也会在Loading composer repositories阶段失败 - 别用
--offline:该参数根本不存在,是常见误传
离线 install 的最小安全命令组合
前提是目标机已存在未改动的 composer.lock、完整 vendor/ 目录,且 PHP 版本与扩展(mbstring、openssl、zlib)完全一致。
- Linux/macOS:
COMPOSER_DISABLE_NETWORK=1 composer install --no-plugins --no-scripts --no-autoloader - Windows CMD:
set COMPOSER_DISABLE_NETWORK=1 && composer install --no-plugins --no-scripts --no-autoloader - PowerShell:
$env:COMPOSER_DISABLE_NETWORK="1"; composer install --no-plugins --no-scripts --no-autoloader - 执行完必须立刻补一记:
composer dump-autoload -o,否则运行时大概率报Class not found
容易被忽略的三处配置残留
很多团队拷贝了 vendor/ 就以为能直接跑,结果在离线机上失败,问题往往出在这三点:
- 没清全局镜像:
composer config --global repo.packagist false必须执行,否则 Composer 会 fallback 到https://mirrors.aliyun.com/composer/等地址 -
composer.lock含"source": {"type": "git", ...}条目:这种锁文件天生不支持离线,install 必然失败 - 项目级
composer.json中写了"repositories": [{"type": "packagist", "url": false}]:在COMPOSER_DISABLE_NETWORK=1下会直接退出,不是静默忽略
离线不是“断网就行”,而是要切断所有可能触发网络的路径——环境变量、命令参数、全局配置、锁文件结构,缺一不可。稍有遗漏,composer install 就会在 Loading 阶段卡死或报错。


















