必须设COMPOSER_DISABLE_NETWORK=1,否则composer install必请求https://repo.packagist.org/packages.json而卡住或报错;该变量是硬性开关,跳过所有HTTP请求,--no-plugins等参数无效,且需配合--no-autoloader及dump-autoload -o。

必须设 COMPOSER_DISABLE_NETWORK=1,否则 composer install 一定会去请求 https://repo.packagist.org/packages.json 并卡住或报错——这不是网络不稳定,是 Composer 默认行为强制校验远程元数据。
为什么加了 --no-plugins --no-scripts 还失败
这些参数只跳过插件初始化和脚本执行,但无法阻止 Composer 在 install 阶段访问 Packagist 校验包是否存在、版本是否合法、dist URL 是否可访问。只要没设 COMPOSER_DISABLE_NETWORK=1,所有 --no-xxx 都无效。
-
COMPOSER_DISABLE_NETWORK=1是硬性开关,它让整个依赖解析流程跳过所有 HTTP 请求,包括仓库元数据加载、包信息查询、dist URL 检查 - 如果全局配置残留
repo.packagist(比如之前配过镜像),即使设了环境变量也会直接退出,必须先运行composer config --global repo.packagist false - 项目级
composer.json中写了"repositories": [{"type": "packagist", "url": false}],在COMPOSER_DISABLE_NETWORK=1下会立即报错退出,不是静默忽略
离线 install 的最小安全命令组合
前提是:目标机已存在完整 vendor/ 和未改动的 composer.lock,PHP 版本与扩展(mbstring、openssl、zlib)完全一致。
- 执行前必须设置环境变量:
COMPOSER_DISABLE_NETWORK=1 - 推荐命令:
composer install --no-plugins --no-scripts --no-autoloader - 执行完必须立刻补一记:
composer dump-autoload -o,否则运行时大概率报Class not found - 不要用
--offline:该参数不存在,是常见误传
离线添加新包只能靠 path 仓库
composer require 默认必须联网查包名和版本,离线不可用。唯一可靠方式是把本地目录当仓库用:
- 目标包根目录下必须有合法
composer.json,含完整name(如"acme/utils")和明确version(如"1.2.0")或分支标识(如"dev-main") - 项目
composer.json的repositories段要显式声明:{"type":"path","url":"./packages/my-utils"} - 执行
composer require acme/utils:@dev,注意必须带@dev,否则不识别 - 安装后必须立即运行
composer dump-autoload -o,否则 PSR-4 自动加载规则不会生效
最容易被忽略的是:即使 vendor/ 已存在,composer install 仍会尝试 fallback 到远程源做一致性校验——这个行为只有 COMPOSER_DISABLE_NETWORK=1 能真正掐断,其他任何参数或配置都是辅助,不是替代。











