composer离线安装必须显式设置composer_disable_network=1,否则即使vendor和lock文件完整,仍会因元数据校验失败而报错;需配合--prefer-dist --no-plugins --no-scripts --no-autoloader及后续dump-autoload -o。

隔离网络下 Composer 不能靠“断网自动降级”,必须显式切断所有网络触发点,否则哪怕 vendor/ 和 composer.lock 都完整,也会卡在 Loading composer repositories 或报 Could not fetch https://repo.packagist.org/packages.json。
必须设 COMPOSER_DISABLE_NETWORK=1 才算真正离线
这个环境变量不是可选项,是硬性开关。不设它,--no-plugins、--no-scripts 等参数全无效——Composer 会在解析 composer.lock 阶段主动发起元数据请求,绕过所有“跳过”类参数。
- 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 - 验证是否生效:执行
composer config -g repos,输出里不应出现packagist.org;若仍有,需先运行composer config -g repo.packagist false
cache-dir 迁移必须完整,但关键只在 files/ 和 repo/
缓存目录结构分三块:files/(ZIP 包)、repo/(JSON 元数据)、archived/(归档记录)。只拷 files/ 是最常见错误——没有 repo/https---packagist.org/packages.json,Composer 就不知道哪个 SHA 对应哪个 ZIP,会直接退出而非报错。
- 查真实路径:
composer config --global cache-dir(Linux/macOS 默认~/.composer/cache,Windows 是%LOCALAPPDATA%\Composer\cache) - 打包时必须包含整个缓存根目录,隐藏文件(如
.htaccess)也不能漏 - 离线机上必须用相同路径恢复:
composer config --global cache-dir /opt/composer-cache,再解压到该路径 - 路径含中文会失败(如
/home/张三/.composer/cache),cURL 解析file://URL 时会因未转义报failed to open stream,务必用纯英文路径
离线安装命令必须带这组参数组合
单独用 --no-plugins 或 --no-scripts 不够,它们只是防插件/脚本联网,挡不住 Composer 自身的元数据校验行为。以下参数缺一不可:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
--prefer-dist:强制走 ZIP 包,跳过source类型(如 Git 克隆),后者在离线环境下必失败 -
--no-plugins:防止 phpstan/extension-installer 等插件初始化时隐式联网 -
--no-scripts:屏蔽post-install-cmd,避免脚本调用外部 API -
--no-autoloader:绕过 autoload 重建阶段,某些自定义逻辑会触发远程类查找
执行完后必须立刻补一记:composer dump-autoload -o,否则运行时大概率报 Class not found。
别信 --offline 或 --no-network
这两个参数根本不存在:--no-network 是用户误传的非法参数;--offline 只影响 update 行为,对 install 的初始元数据请求完全无效。唯一可靠方式就是 COMPOSER_DISABLE_NETWORK=1 + 正确缓存 + 锁文件匹配。
最容易被忽略的是 composer.lock 里某包的 dist.shasum 在本地 cache/files/ 中找不到对应 ZIP——Composer 不模糊匹配,只按哈希值精确查找。建议在联网机上用 find ~/.composer/cache/files -name "*${shasum:0:8}*.zip" 手动验证关键包是否存在。










