离线安装失败主因是未设composer_disable_network=1,该变量为硬开关,缺之必联网请求packages.json;需配合--prefer-dist、完整缓存(files/repo/archived)、--no-plugins --no-scripts等参数。

离线安装失败,八成是因为没设 COMPOSER_DISABLE_NETWORK=1
这个环境变量不是可选项,是硬开关。不设它,composer install 会坚持去请求 https://repo.packagist.org/packages.json,哪怕 vendor/ 已存在、composer.lock 一字未改,也会卡在 Loading composer repositories 或直接报 Could not fetch。
常见误区:
-
--no-network不是合法参数,官方从未实现过 -
--offline只跳过更新,挡不住初始元数据请求 - Windows 用户用 CMD 时必须分两步:
set COMPOSER_DISABLE_NETWORK=1,再运行composer install;PowerShell 则用$env:COMPOSER_DISABLE_NETWORK="1"
缓存目录必须完整迁移,不能只拷 cache/files/
Composer 离线依赖三件套:files/(ZIP 包)、repo/(JSON 元数据映射)、archived/(归档缓存)。缺任一,它就 fallback 到联网。
实操要点:
- 先查真实路径:
composer config --global cache-dir(Linux/macOS 默认~/.composer/cache,Windows 是%LOCALAPPDATA%\Composer\cache) - 打包整个缓存根目录,包括隐藏文件(如
.htaccess)和所有子目录 - 解压后验证:
$(composer config --global cache-dir)/repo/https---packagist.org/packages.json是否存在且非空(内容应为 JSON 格式) - 离线机上必须同步执行:
composer config --global cache-dir /path/to/restored/cache,否则 Composer 仍读默认路径
--prefer-dist 是离线前提,source 类型包会直接失败
只有 dist 类型(ZIP/TAR)才走本地缓存路径;"type": "git" 或 "type": "svn" 的包在离线时会直接报错,不尝试 fallback。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
确保联网机生成 lock 文件时用了 --prefer-dist:
- 运行:
composer install --no-install --prefer-dist --no-scripts,让所有包以 ZIP 形式落盘到缓存 - 检查
composer.lock中每个包是否含"dist": {"shasum": "...", "url": "..."}字段 - Windows 用户注意路径分隔符:缓存路径配置用
D:/composer-cache,别用D:\composer-cache(反斜杠会被截断)
插件和脚本可能绕过 COMPOSER_DISABLE_NETWORK
这个环境变量只拦 Composer 主流程的 HTTP 请求,拦不住某些插件或脚本内部发起的调用。
典型绕过行为:
-
hirak/prestissimo插件在 post-install 阶段自行拉包 -
phpstan/extension-installer读远程配置 - 某些包的
post-install-cmd调用curl_init()或file_get_contents("http://...")
所以必须加参数组合:--no-plugins --no-scripts --no-dev。若项目依赖前端构建(如 npm install),还要确认 composer.json 中没声明相关脚本,否则即使设了 COMPOSER_DISABLE_NETWORK=1 也会失败。
最易被忽略的是缓存路径与 PHP 运行用户权限不一致——比如预下载时用 root 用户,离线机上用 www-data 执行 composer install,结果因权限不足读不到 cache/files/ 下的 ZIP,却只报静默失败,无明确错误提示。










