composer 离线安装核心是启用 --offline 模式,强制跳过网络请求、仅从本地缓存(~/.composer/cache/)或 vendor/ 读取包;需提前联网执行 composer install 写入缓存,确保 composer.lock 中的 exact version 和 shasum 与缓存文件匹配,私有仓库需预先配置,ci/cd 中须显式缓存并恢复 ~/.composer/cache/ 目录。

composer install 时跳过远程包下载
强制走本地缓存,本质是让 Composer 完全不碰网络,只从 vendor/ 或 ~/.composer/cache/ 里找包。但注意:Composer 默认不会“自动回退到缓存”,它只在首次安装或版本变更时才下载;所谓“强制缓存”,其实是关掉网络依赖、确保离线可用。
- 加
--no-install没用,那是跳过安装步骤,不是跳过下载 - 真正起效的是
--prefer-source和--prefer-dist的组合行为——但它们不控制缓存,只控制包来源类型 - 核心开关是
--offline:启用后 Composer 拒绝任何 HTTP 请求,找不到本地副本就直接报错,不会尝试 fallback 到 packagist
怎么提前把包塞进本地缓存
缓存不是“用了就自动变快”,而是靠 composer install 或 composer update 过程中下载的包被存进 ~/.composer/cache/(Linux/macOS)或 %LOCALAPPDATA%\Composer\cache\(Windows)。想离线能用,得先联网跑一遍,且确保缓存没被清空。
多奥淘宝客程序免费版拥有淘宝客站点的基本功能,手动更新少,管理简单等优点,适合刚接触网站的淘客们,或者是兼职做淘客们。同样拥有VIP版的模板引擎技 术、强大的文件缓存机制,但没有VIP版的伪原创跟自定义URL等多项创新的搜索引擎优化技术,除此之外也是一款高效的API数据系统实现无人值守全自动 化运行的淘宝客网站程序。4月3日淘宝联盟重新开放淘宝API申请,新用户也可使用了
- 运行
composer install --no-scripts --no-dev(按需删减),触发缓存写入 - 别手动删
~/.composer/cache/files/下的 zip,那是 dist 包缓存,删了 offline 就失效 -
composer clear-cache会清空所有,离线前务必确认没执行过 - 如果项目用的是私有 repo,要提前用
composer config --global repositories.xxx注册好,否则 offline 时连 repo 地址都解析不了
为什么 --offline 还是报错 “Package not found”
常见于两种情况:缓存里压根没这个包,或者包的 hash 不匹配(比如你改过 composer.lock 但没更新缓存)。Composer 的 offline 模式非常严格——它不校验“有没有类似版本”,只认 lock 文件里写的 exact version + exact hash。
- 检查
composer.lock里对应包的dist.shasum字段,再去看~/.composer/cache/files/[vendor]/[package]/[hash].zip是否存在且大小非零 - 私有包若用的是
pathrepository,--offline是 OK 的,但必须确保 path 路径真实存在且可读 - 如果用
composer require xxx增量装包,记得加--no-update,否则会触发网络请求去 resolve 新依赖
CI/CD 中稳定复用缓存的实操要点
在 GitHub Actions 或 GitLab CI 里想靠缓存提速,不能只靠 --offline,因为 runner 是干净环境,缓存目录默认为空。必须显式 restore + save 缓存路径。
- 缓存路径要覆盖
~/.composer/cache/全量,不是只缓存vendor/ - GitHub Actions 示例:
composer install --no-interaction --no-progress --prefer-dist --optimize-autoloader --offline必须放在 cache restore 之后、且前面没任何composer update - GitLab CI 注意:默认镜像可能没预装 Composer,或版本太老(composer --version 确认
- 如果项目用了
platform-check或config.platform,某些 PHP 扩展缺失会导致 install 卡住,这和缓存无关,但容易误判为“缓存失效”









