composer_disable_network=1是唯一有效的离线开关,必须配合--no-plugins--no-scripts使用;设后composer会在所有可能联网处报错退出而非静默跳过,且需通过hosts屏蔽packagist.org验证是否真断网。

COMPOSER_DISABLE_NETWORK=1 是唯一有效的离线开关
Composer 没有 --offline 或 --mode=offline 这类命令行参数,所谓“强制离线”只有一条硬通路:COMPOSER_DISABLE_NETWORK=1。设了它,Composer 会在任何可能触发 HTTP 请求的地方直接报错退出——不是静默跳过,而是明确拒绝联网。这既是防护,也是验证:如果命令还能跑通,说明真没发请求;如果报错,那错误信息里通常会带 Connection refused 或 Could not fetch,反而是好事。
- Linux/macOS:执行前加
COMPOSER_DISABLE_NETWORK=1 composer install --no-plugins --no-scripts - Windows CMD:先运行
set COMPOSER_DISABLE_NETWORK=1,再运行composer install --no-plugins --no-scripts - PowerShell:用
$env:COMPOSER_DISABLE_NETWORK="1",注意引号不能省
别用 export COMPOSER_DISABLE_NETWORK=1 后再开新 shell——变量不会继承,必须在同一条命令行里生效,或确保子进程能读到。
设了环境变量还报 Could not fetch?检查这三处
常见现象:明明加了 COMPOSER_DISABLE_NETWORK=1,composer install 仍卡在 Could not fetch https://repo.packagist.org/packages.json。这不是变量没生效,而是 Composer 在进入 install 流程前就已触发校验,且某些配置会绕过该变量的拦截。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
composer.json里写了"repositories": [{"type": "packagist", "url": false}]—— 这种写法在COMPOSER_DISABLE_NETWORK=1下会直接报错退出,不是忽略 - 全局配置残留
repo.packagist:运行composer config -g --unset repo.packagist彻底清掉 -
composer.lock中某个包的dist.url是https://开头,且没配本地path或composer类型仓库——这时即使禁网,Composer 也会因无法解析 URL 而失败
为什么不能只靠环境变量,还得加 --no-plugins --no-scripts
COMPOSER_DISABLE_NETWORK=1 拦不住插件和脚本里的网络调用。比如 composer-asset-plugin 初始化时会尝试访问 GitHub,symfony/flex 的 post-install-cmd 可能调用 API 获取 recipe,这些行为发生在 Composer 主流程之后,环境变量对其无效。
-
--no-plugins:跳过所有插件加载,包括自动注册 autoloader、应用 recipe 等隐式联网动作 -
--no-scripts:屏蔽post-install-cmd、pre-autoload-dump等自定义命令,防止它们调用curl或file_get_contents("https://...") - 不加这两个参数,哪怕
COMPOSER_DISABLE_NETWORK=1生效了,也可能在 install 后半段突然报错
验证是否真的离线:用 hosts 文件做最终确认
环境变量和参数都设对了,不代表绝对安全。最可靠的验证方式是让 packagist.org 根本无法解析:
- Linux/macOS:往
/etc/hosts加一行127.0.0.1 packagist.org - Windows:往
%SystemRoot%\System32\drivers\etc\hosts加同样一行 - 然后运行
COMPOSER_DISABLE_NETWORK=1 composer install -v,看到Connection refused才算真正切断
这个步骤不能省——很多内网部署失败,表面是 Composer 报错,实际是 DNS 解析成功但 HTTP 超时,导致错误被误判为“环境问题”,而真实原因是没彻底阻断网络路径。










