COMPOSER_DISABLE_NETWORK=1是离线安装硬性前提,不设则必报Could not fetch元数据错误;--no-plugins、--no-scripts等参数无法阻止远程校验,仅COMPOSER_DISABLE_NETWORK=1能真正禁用网络请求。

断网安装 Composer 项目,COMPOSER_DISABLE_NETWORK=1 是硬性前提,缺它就必报 Could not fetch https://repo.packagist.org/packages.json——不是网络慢,是 Composer 默认行为强制校验远程元数据,不设这个环境变量,所有 --no-xxx 参数都无效。
为什么加了 --no-plugins --no-scripts 还失败
这些参数只跳过插件初始化和脚本执行,但无法阻止 Composer 在 install 阶段访问 Packagist 校验包是否存在、版本是否合法、dist URL 是否可访问。只要没设 COMPOSER_DISABLE_NETWORK=1,整个依赖解析流程仍会发起 HTTP 请求,包括仓库元数据加载、包信息查询、dist URL 检查。
-
COMPOSER_DISABLE_NETWORK=1是唯一生效的离线开关,--no-network参数根本不存在,官方从未实现 - Linux/macOS 必须前置写法:
COMPOSER_DISABLE_NETWORK=1 composer install ... - Windows CMD 需用:
set COMPOSER_DISABLE_NETWORK=1 && composer install ... - PowerShell 需用:
$env:COMPOSER_DISABLE_NETWORK="1"; composer install ...
离线 install 必须带哪几个参数
仅设环境变量还不够。默认行为仍会重建 autoload、执行脚本、加载插件——这些环节可能间接触发网络调用(比如 phpstan/extension-installer 初始化时查版本)。
-
--no-plugins:防止hirak/prestissimo等插件尝试联网加速 -
--no-scripts:屏蔽post-install-cmd,避免脚本调用curl或npm install -
--no-autoloader:绕过 autoload 重建,某些自定义 autoloader 实现会尝试远程类查找 - 执行完必须立刻补一记:
composer dump-autoload -o,否则运行时大概率报Class not found
离线前最容易被忽略的三件事
很多团队在联网机上配了镜像、跑了 install,以为 vendor/ 拷过去就能用,结果离线机上直接报错。问题往往出在这三点:
- 没清掉全局镜像配置:
composer config --global repo.packagist false必须执行,否则 Composer 会在离线时 fallback 尝试连接https://mirrors.aliyun.com/composer/ -
composer.lock里含"source": {"type": "git"}条目:这种锁文件天生不支持离线,install必然失败 - 用了
create-project命令初始化:它强制联网解析模板元数据,COMPOSER_DISABLE_NETWORK=1对它完全无效
离线不是“断网就行”,而是要切断所有触发网络的路径——包括配置残留、锁文件结构、命令选择。稍有遗漏,composer install 就会在 Loading composer repositories 阶段卡死或报错。











