离线安装需确保元数据、zip包和无网络请求三者齐备,而非仅复制vendor;镜像源仅加速联网场景,无法替代离线配置。

离线安装不是“把 vendor 复制过去就行”,而是让 composer install 在完全断网时仍能走完元数据解析 → 版本比对 → 包下载 → 解压 autoload 全流程;镜像源则只解决联网时的加速和稳定性问题,两者目标不同、配置互不替代。
为什么 composer install 离线后还报 “Could not fetch”
这不是网络超时,是 Composer 根本没尝试读本地缓存。默认行为下,它只信任远程源返回的元数据:composer.lock 里写的 dist.url(比如 https://api.github.com/...)在离线时无法访问,就会直接失败——连 ~/.composer/cache/files/ 里的 zip 都不看一眼。
- 必须提前在联网机执行
composer install --prefer-dist,确保所有包以 dist 形式(zip/tar)下载并落盘到缓存 - 缓存路径要确认:Linux/macOS 是
~/.composer/cache/files/,Windows 是C:\Users\用户名\AppData\Roaming\Composer\Cache\files\ - 离线机上不能只复制缓存目录,还得用
composer config --global cache-files-dir /path/to/cached/files显式指向它,否则 Composer 会忽略 -
COMPOSER_DISABLE_NETWORK=1可强制跳过所有网络请求,但仅限于已有缓存且composer.lock完整的场景
用 artifact 类型仓库直接读本地 ZIP 包
比依赖全局缓存更可控:你提供包,Composer 只负责解压和装 autoload,不查任何远程地址。适合已知全部依赖版本、且能提前打包的场景。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 把所有
vendor/name-version.zip放进一个目录,比如./packages/archives/ - 在项目
composer.json中加配置:"repositories": [ { "type":"artifact", "url":"./packages/archives" } ] - ZIP 文件名必须严格匹配
vendor/name-version.zip格式(如monolog/monolog-2.13.0.zip),否则 Composer 找不到 -
artifact不支持分支或 dev 版本,只能用稳定版 tag;如果lock文件里锁的是dev-main,得先改composer.lock或用satis生成对应 dist 包
用 satis 构建可 HTTP 访问的静态镜像
这是真正“离线可用”的方案:生成完整的 packages.json + ZIP 包集合,再用本地 HTTP 服务托管。Composer 会把它当普通 Packagist 源一样用,只是地址是 http://127.0.0.1:8000。
-
satis.json中必须启用"archive"段,且"format": "zip"已设置;否则只生成 JSON 列表,composer install仍会尝试下载远程包 - 必须开启
"require-dependencies": true,否则子依赖(如psr/log)元数据缺失,Resolving dependencies阶段就卡死 - 离线机上必须用 HTTP 服务托管镜像,不能用
file://—— Composer 2+ 明确禁用该协议,哪怕路径完全正确也会报Invalid repository type: file: - 配置命令必须是:
composer config -g repos.packagist '{"type":"composer","url":"http://192.168.10.100"}'(注意双引号转义),且archive.prefix-url必须与实际服务地址一致,否则 ZIP 下载链接 404
镜像源配置常见失效点
配了镜像却还是慢或报错,大概率不是镜像地址问题,而是配置没生效或被覆盖。
- 键名必须是
repo.packagist(单数),写成repos.packagist或packagist.org都静默无效 -
composer是type字段值,不是可选参数,漏掉会导致 fallback 到官方源 - URL 必须以
https://开头且末尾带/,例如https://mirrors.aliyun.com/composer/✅,少斜杠可能拼出错误路径导致 404 - 项目级
composer.json中定义了repositories数组,会彻底屏蔽全局配置;想验证镜像是否真生效,用composer show -v | grep "Downloading"看真实请求域名
离线安装最易被忽略的硬条件是:所有递归依赖的元数据 + 所有 dist ZIP 包 + Composer 客户端全程不发外网请求,三者缺一不可。镜像源则永远只是联网场景下的优化手段,别指望它能解决离线问题。










