必须设 COMPOSER_DISABLE_NETWORK=1,否则 composer install 会因强制联网校验 packages.json 而卡住或报错;该变量是官方唯一支持的离线开关,需前置全局生效,并配合 --prefer-dist 等参数使用。

必须设 COMPOSER_DISABLE_NETWORK=1,否则哪怕 vendor/ 和 composer.lock 都完整,也会卡在 Loading composer repositories 或报 Could not fetch https://repo.packagist.org/packages.json。
为什么 composer install 在内网总卡住或报错
不是网络没断干净,而是 Composer 默认行为就包含主动联网请求:解析 composer.lock 时会先拉取 packages.json 校验包元数据,这个步骤无法跳过——除非用环境变量硬性拦截。常见误操作包括:
- 只改了
composer.json里的镜像地址,但没关网络开关 - 以为“拔网线”就够了,结果
curl或fopen仍尝试连接(尤其 Windows 下 hosts 未屏蔽) - 用了不存在的参数如
--no-network或--offline,它们不生效
验证是否真断网:在内网机上执行 curl -v https://repo.packagist.org/packages.json,应返回连接拒绝;或临时往 /etc/hosts(Windows 是 %SystemRoot%\System32\drivers\etc\hosts)加一行 127.0.0.1 repo.packagist.org 再试。
COMPOSER_DISABLE_NETWORK=1 必须前置且全局生效
这个变量是唯一合法、被 Composer 官方文档明确支持的离线开关,它会在初始化阶段直接跳过所有网络触发点:元数据拉取、dist 下载、插件远程校验。不同系统设置方式不同:
- Linux/macOS:
COMPOSER_DISABLE_NETWORK=1 composer install --prefer-dist --no-plugins --no-scripts --no-autoloader - Windows CMD:
set COMPOSER_DISABLE_NETWORK=1 && composer install --prefer-dist --no-plugins --no-scripts --no-autoloader - PowerShell:
$env:COMPOSER_DISABLE_NETWORK="1"; composer install --prefer-dist --no-plugins --no-scripts --no-autoloader
注意:--no-autoloader 是为防 autoload 重建过程中触发远程类查找;执行完必须补一记 composer dump-autoload -o,否则运行时大概率 Class not found。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
缓存迁移不能只拷 files/ 目录
Composer 缓存生效依赖三件套共存:files/(ZIP 包)、repo/(JSON 映射表)、archived/(归档记录)。只复制 files/ 是最常见错误,会导致日志里仍出现 Fetching https://repo.packagist.org/packages.json。
- 查真实路径:
composer config --global cache-dir(Linux/macOS 默认~/.composer/cache,Windows 是%LOCALAPPDATA%\Composer\Cache) - 打包整个缓存根目录,保留隐藏文件(如
.htaccess)和子目录结构 - 内网机上必须同步设置:
composer config --global cache-dir /path/to/restored/cache,路径需与源机完全一致 - 重点验证:
$(composer config --global cache-dir)/repo/https---packagist.org/packages.json是否存在且内容为有效 JSON
如果缓存路径含中文(如 /home/张三/.composer/cache),file:// 协议解析会失败,报 failed to open stream: No such file or directory。务必在联网机提前用 composer config --global cache-dir /tmp/composer-cache-en 切换为纯英文路径。
更可控的方案:用 file:// 本地仓库替代全局缓存
当缓存迁移出问题、或需审计 ZIP 来源(比如私有组件、安全合规要求),推荐绕过缓存机制,直接用本地目录作仓库。这种方式不依赖 repo/ 下的 JSON 映射,只要 ZIP 文件名和 composer.lock 中记录的 dist.shasum 一致就能命中。
- 把所有 dist ZIP 按规范整理:
vendor/name/version-sha256.zip(例如monolog/monolog/7a8e0d4b12c3.zip) - 建一个空目录(如
/tmp/my-dist-repo),把全部 ZIP 放进去 - 执行:
composer install --repository-url=file:///tmp/my-dist-repo --prefer-dist --no-plugins --no-scripts
注意:file:// 后必须是绝对路径,Windows 下要写成 file:///C:/my-dist-repo(三个斜杠),且路径不能含空格或中文。
真正麻烦的从来不是“怎么设”,而是“设完发现还是连上了”——因为 composer.lock 里某个包的 dist.type 是 source(比如 dev-master 或 Git URL),或者全局配置残留了 repo.packagist。这些细节不检查,光配环境变量毫无意义。

















