composer_disable_network=1是离线安装唯一有效开关,不设则所有--no-xxx参数无效;必须配合完整cache(含repo/和files/)、禁用全局及项目级packagist配置,并在install后执行composer dump-autoload -o补全autoload。

COMPOSER_DISABLE_NETWORK=1 是唯一有效开关
不设这个环境变量,其他所有参数都白搭。Composer 默认会在 install 阶段主动请求 https://repo.packagist.org/packages.json,哪怕 vendor/ 和 composer.lock 全在,也会卡住或报 Could not fetch。它不是超时问题,是硬编码的元数据校验行为。
常见错误写法:--no-network(非法参数)、--offline(只跳过更新,挡不住初始请求)、断网后直接运行 composer install(仍会尝试连接)。
正确做法:
- Linux/macOS:前置设置,如
COMPOSER_DISABLE_NETWORK=1 composer install --prefer-dist - Windows CMD:
set COMPOSER_DISABLE_NETWORK=1 && composer install --prefer-dist - PowerShell:
$env:COMPOSER_DISABLE_NETWORK="1"; composer install --prefer-dist
缓存目录必须包含 repo/ 和 files/ 两个子目录
只拷 ~/.composer/cache/files/ 是最常见失败原因。Composer 离线时靠 repo/https---packagist.org/packages.json 把包名和版本映射到本地 ZIP 文件路径;没有它,就等于没地图,files/ 里堆再多 ZIP 也找不到对应关系。
验证是否完整:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 运行
composer config --global cache-dir查真实路径 - 确认该路径下存在
repo/https---packagist.org/packages.json,且内容是合法 JSON(含大量"monolog/monolog": { ... }结构) - 确认
files/下有对应dist.shasum前 8 位命名的 ZIP,例如monolog/monolog/7a8e0d4b12c3.zip
全局镜像配置会干扰离线行为
即使设了 COMPOSER_DISABLE_NETWORK=1,如果全局还留着 repo.packagist 配置(比如之前配过阿里云镜像),Composer 在解析阶段仍可能 fallback 到该 URL 并触发失败退出。
解决办法是彻底禁用:
- 运行
composer config --global repo.packagist false - 检查是否生效:
composer config --global repo.packagist应输出null或空值,不是 URL - 若项目
composer.json里有自定义repositories,也需临时注释掉,尤其是 type 为packagist或composer的条目
离线安装后必须补 autoload 优化
composer install 在 COMPOSER_DISABLE_NETWORK=1 下跳过了 autoload 重建逻辑,但运行时仍依赖 vendor/autoload.php。不手动补上,大概率报 Class not found。
执行顺序不能错:
- 先完成离线 install(带
--no-plugins --no-scripts --no-autoloader) - 立刻运行
composer dump-autoload -o(注意加-o,否则不生成优化版) - 若目标机 PHP 版本与源机不一致(尤其小版本不同),
dump-autoload -o可能失败,此时只能去掉-o先保证可用
最容易被忽略的是缓存路径中的中文字符——~/.composer/cache 若落在 /home/张三/ 这类路径下,file:// 协议解析会失败,报 failed to open stream。务必用纯英文路径重定向缓存,且两端一致。










