离线安装 composer 依赖必须设 composer_disable_network=1,否则即使 vendor 完整、lock 未改,也会卡在 loading composer repositories 或报 could not fetch;--no-network 非法,--offline 仅跳过更新不阻初始请求,缓存需 files/repo/archived 全量迁移,锁文件禁用 source 类型,最终执行 composer_disable_network=1 composer install --no-plugins --no-scripts --no-autoloader --prefer-dist --no-interaction 后补 dump-autoload -o。

离线安装 Composer 依赖,COMPOSER_DISABLE_NETWORK=1 是硬性前提,缺了它,其他所有参数都无效——哪怕 vendor/ 目录完整、composer.lock 一字未改,也会卡在 Loading composer repositories 或报 Could not fetch https://repo.packagist.org/packages.json。
为什么设了 --no-network 还会联网?
--no-network 不是 Composer 的合法参数,官方从没实现过这个开关。用户常误以为它存在,实际起作用的只有环境变量 COMPOSER_DISABLE_NETWORK=1。这个变量不是“建议禁网”,而是强制跳过所有网络触发点:元数据拉取、dist 下载、插件初始化时的远程校验。但注意,它不解决缓存缺失问题——如果 cache/repo/ 下没有 packages.json,或 cache/files/ 里缺某个包的 ZIP 文件,Composer 仍会直接退出,不是报错,而是静默失败。
- Linux/macOS:必须前置设置,如
COMPOSER_DISABLE_NETWORK=1 composer install --prefer-dist - Windows CMD:先执行
set COMPOSER_DISABLE_NETWORK=1,再运行命令 - PowerShell:用
$env:COMPOSER_DISABLE_NETWORK="1" - 别信
--offline:它只跳过元数据更新和 dist 下载,但挡不住初始packages.json请求
缓存目录必须完整迁移,不能只拷 files/
Composer 缓存生效依赖三个子目录共存:files/(ZIP 包)、repo/(元数据 JSON)、archived/(composer archive 生成的归档)。只复制 files/ 是最常见错误,结果日志里仍出现 Fetching https://repo.packagist.org/packages.json ——因为没 repo/,Composer 根本不知道哪个 SHA 对应哪个 ZIP。
- 先查真实路径:
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存在且非空
锁文件里不能有 "type": "source"
composer.lock 中任意一个包若标记为 "type": "git" 或 "type": "svn"(常见于 "dev-master"、"dev-main" 或私有 Git 仓库),--prefer-dist 就会直接失败。离线时没有源码克隆能力,也没有对应 ZIP 可校验。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 联网机上必须执行
composer update --lock,把所有dev-版本固化为语义化版本(如2.10.0) - 删掉
composer.json中的"minimum-stability": "dev",设为"stable" - 检查每个包的
dist.shasum字段是否非空;若为空,说明该包未走--prefer-dist路径,缓存不完整 - 验证方式:打开
composer.lock,搜索"type": "source"或"url": "https://github.com/,确保无匹配项
离线机上最稳的一行命令是什么?
不是 composer install,而是:
COMPOSER_DISABLE_NETWORK=1 composer install --no-plugins --no-scripts --no-autoloader --prefer-dist --no-interaction
这行命令绕过了三类高风险环节:--no-plugins 防止 hirak/prestissimo 或 phpstan/extension-installer 内部发起 HTTP 请求;--no-scripts 屏蔽 post-install-cmd 中可能调用的外部 API;--no-autoloader 跳过 autoload 重建——某些自定义实现会在类加载阶段尝试远程查找(虽少见,但真实存在)。
- 执行完必须补一记:
composer dump-autoload -o,否则运行时大概率报Class not found - Windows 用户特别注意:缓存路径含中文或空格会导致失败,迁移前先用
composer config --global cache-dir确认路径 - PHP 版本、必需扩展(
mbstring、openssl、zlib)必须与联网机构建时一致,否则dump-autoload可能生成错误映射
真正可靠的离线方案,从来不是“让 Composer 在断网时勉强跑通”,而是提前在联网机完成依赖固化、元数据落地、缓存结构验证,并在离线机上切断所有回退路径——少一个环节,就可能卡在 Could not fetch 或静默跳过关键步骤。










