必须设COMPOSER_DISABLE_NETWORK=1,否则所有离线配置无效;它才是唯一生效的硬性开关,--no-network参数根本不存在。需配合--no-plugins、--no-scripts、--no-autoloader,并执行composer dump-autoload -o。

必须设 COMPOSER_DISABLE_NETWORK=1,否则所有“离线配置”都无效——它不是可选项,是硬性开关。
为什么 --no-network 不起作用?
这个参数根本不存在。Composer 官方从未实现 --no-network,用户常从别处抄来,结果命令照常联网失败,错误日志里仍出现 Could not fetch https://repo.packagist.org/packages.json。真正生效的只有环境变量 COMPOSER_DISABLE_NETWORK=1,它会强制跳过所有 HTTP 触发点:元数据加载、dist 校验、插件远程检查。
- 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 install 离线执行必须带哪几个参数?
只设 COMPOSER_DISABLE_NETWORK=1 还不够。默认行为仍会重建 autoload、执行脚本、加载插件——这些环节可能间接触发网络调用(比如 phpstan/extension-installer 初始化时查版本)。
-
--no-plugins:屏蔽插件远程校验(如hirak/prestissimo会尝试发起 HTTP 请求) -
--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对它完全无效;离线必须改用分步法(git clone+ 复制vendor+dump-autoload)
离线不是“断网就行”,而是要切断所有触发网络的路径——包括配置残留、锁文件结构、命令选择。稍有遗漏,composer install 就会在 Loading composer repositories 阶段卡死或报 Could not fetch。


















