--offline报“package not found”是因为它严格校验composer.lock中指定的精确版本与shasum,且要求缓存files/下存在对应哈希名zip文件;缺一不可,不降级、不兜底。

离线时 composer install 报 Could not fetch,不是缓存没用上,而是你没告诉 Composer “不准联网”,也没确认缓存里真有它要找的那个 ZIP 包。
为什么 --offline 还是报错 “Package not found”
Composer 的 --offline 模式不兜底、不降级——它只认 composer.lock 里写的 exact version + exact dist.shasum,且必须在 cache-dir/files/ 下找到对应哈希名的 ZIP 文件,缺一不可。
- 检查
composer.lock中某包的"dist": {"shasum": "abc123..."}字段 - 进缓存目录:
$(composer config --global cache-dir)/files/vendor/name/abc123...zip,看文件是否存在、大小非零 - 私有包若用的是
path类型仓库,--offline是 OK 的,但路径必须真实可读(不能是相对路径或已删除的 symlink) -
composer update在--offline下直接失败,别试
缓存迁移必须包含 repo/ 和 files/ 两个目录
只拷 files/ 目录,composer install --prefer-dist 仍会卡在 Loading composer repositories —— 因为没 repo/https---packagist.org/packages.json,Composer 不知道哪个 ZIP 对应哪个包。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 完整缓存路径通常为:
~/.composer/cache(Linux/macOS)或%LOCALAPPDATA%\Composer\Cache(Windows) - 打包时必须包含
repo/、files/、archived/三个子目录,缺一不可 - 离线机上先执行:
composer config --global cache-dir /your/restored/cache/path,再运行安装命令 - Windows 用户务必避免中文、空格路径;建议显式设为
D:/composer-cache并用set COMPOSER_CACHE_DIR=D:\composer-cache
真正起效的离线命令组合
单靠 --offline 不够,必须配合环境变量和参数封锁所有网络出口,否则某些插件或脚本内部仍会发请求。
- 必加环境变量:
COMPOSER_DISABLE_NETWORK=1(Linux/macOS 前缀式,Windows 用set或$env:) - 必加参数:
--prefer-dist(强制走 ZIP 安装路径,这是缓存生效唯一通道) - 必加参数:
--no-scripts --no-plugins(防止 post-install-cmd 等触发内部 HTTP 请求) - 推荐加:
--no-interaction --no-progress --no-suggest,避免交互卡死或冗余输出 - 命令示例(Linux/macOS):
COMPOSER_DISABLE_NETWORK=1 composer install --no-interaction --prefer-dist --no-scripts --no-plugins
缓存没清干净,composer install 仍用旧包
删了 vendor/、重生成 composer.lock,甚至跑了 composer clear-cache,结果 install 日志还是显示 Using cache?那说明缓存根本没清完,或者你用的是另一个 Composer 配置上下文。
- 先确认当前生效的缓存路径:
composer config --global cache-dir(注意:不是config cache-dir,漏--global会查项目级配置) -
composer clear-cache只清cache-dir下内容,但如果你用过COMPOSER_HOME自定义路径,得去那个目录下手动删 - 清完立刻验证:
ls -R $(composer config --global cache-dir)/downloads/应为空;再跑composer install -v,日志里必须出现Downloading才算真正重下 -
--no-cache只禁用远程元数据缓存(比如 packages.json),不影响已存在的 dist ZIP,别指望它绕过本地缓存
最常被忽略的一点:缓存文件名里的 hash 是从完整 dist 元数据(URL + shasum + version)算出来的,手动扔个 ZIP 进去几乎必然校验失败。想“骗过” Composer,得用联网机反向生成,而不是离线机硬塞。










