0

0

composer怎么预下载所有依赖供后续离线使用?

穿越時空

穿越時空

发布时间:2026-03-05 15:23:02

|

347人浏览过

|

来源于php中文网

原创

正确离线安装composer依赖的核心是预下载并复用本地缓存:先联网执行composer install确保所有包进入composer_home/cache,再将cache目录复制到离线机,设置composer_cache_dir环境变量后运行composer install --no-interaction --prefer-dist。

composer怎么预下载所有依赖供后续离线使用?

composer install 时加 --no-install 不行,得用 composer install --no-scripts --no-plugins 配合缓存机制

离线预下载的核心不是“跳过安装”,而是让 Composer 把所有包的 zip/tar 包提前拉下来并存进本地 cache,后续离线时再从 cache 解压。默认 composer install 只在需要时才下载,且会执行脚本和插件——这些在离线环境大概率失败,反而污染状态。

正确做法是:先在有网机器上完整跑一次 composer install(确保 vendor/composer.lock 齐全),让所有包进 cache;再把整个 COMPOSER_HOME/cache/ 目录打包带走。cache 路径可通过 composer config --global cache-dir 查看。

  • --no-scripts--no-plugins 不是为加速,是防止某些包的 post-install-cmd 在无网时卡死或报错
  • 别依赖 composer archive ——它只打当前项目,不包含依赖包的源码压缩包
  • 如果项目用了私有 repo,记得提前用 composer config repositories.xxx 注册好,否则 cache 里不会存那些包

离线环境下必须设置 COMPOSER_CACHE_DIR 指向预下载的 cache 目录

Composer 默认 cache 路径是用户主目录下的隐藏文件夹,离线机器上这个路径通常为空。即使你拷了 cache 过来,不显式告诉 Composer 去哪找,它还是会尝试联网下载。

知识画家
知识画家

AI交互知识生成引擎,一句话生成知识视频、动画和应用

下载

执行前先设环境变量:export COMPOSER_CACHE_DIR=/path/to/your/cachedir(Linux/macOS)或 set COMPOSER_CACHE_DIR=C:\path\to\cachedir(Windows)。然后运行 composer install --no-interaction --prefer-dist

  • --prefer-dist 强制走 zip 包安装(而非 git clone),这是 cache 生效的前提
  • 如果 lock 文件里某包只有 source 类型(比如开发中手动改过 repositories),cache 里没 dist 包,就会失败——这种情况得提前检查 composer show vendor/package 确认 type 是 dist
  • 不同 Composer 版本 cache 格式不完全兼容,离线机的 Composer 版本最好和预下载机一致(composer --version 对齐)

验证 cache 是否真正生效:看日志里有没有 Downloading ...Writing into cache

执行 composer install -v(verbose 模式)是最直接的验证方式。正常离线安装时,你应该看到类似 Using version ^2.4 for monolog/monologInstalling monolog/monolog (2.4.0): Loading from cache 的输出。一旦出现 Downloading https://.../monolog/monolog/...,说明某包没进 cache 或路径没对上。

  • 注意区分 “Loading from cache”(成功)和 “Cache is not hit”(失败)——后者常见于 hash 不匹配,通常是 lock 文件被改过但没重生成
  • 如果某个包反复提示未命中 cache,用 ls -la $COMPOSER_CACHE_DIR/files/vendor/package/ 看对应 hash 目录是否存在,不存在就说明预下载阶段根本没拉下来
  • 私有包若用的是 package 类型定义(非 VCS),它的 dist URL 必须可公开访问或已提前下载到 cache,否则离线时无法 fallback

docker 构建中离线安装要额外处理 vendor 目录权限和 cache 挂载

在 CI 或 Dockerfile 里做离线构建时,光拷 cache 不够。因为 vendor/ 是写入目标,而构建镜像时 user 权限、layer 缓存、workdir 路径都可能干扰 cache 查找逻辑。

  • Dockerfile 中建议分两层:先 COPY composer.json composer.lock .,再 RUN COMPOSER_CACHE_DIR=/tmp/composer-cache composer install --no-interaction --prefer-dist,最后 COPY --from=cache-builder /tmp/composer-cache /root/.composer/cache
  • 避免在 vendor/ 所在目录执行 composer install 后再 rm -rf vendor——这会清掉刚解压的文件,但 cache 本身不受影响;真正危险的是误删 $COMPOSER_CACHE_DIR
  • Alpine 镜像里注意 php-zip 扩展必须安装,否则 --prefer-dist 会静默 fallback 到 source,导致离线失败
离线场景下最常被忽略的不是命令怎么写,而是 cache 路径是否真实可读、lock 文件是否干净、以及私有包的 dist URL 是否真的被 Composer 认作有效来源。三者缺一,就会在最后一刻连上网络。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
composer是什么插件
composer是什么插件

Composer是一个PHP的依赖管理工具,它可以帮助开发者在PHP项目中管理和安装依赖的库文件。Composer通过一个中央化的存储库来管理所有的依赖库文件,这个存储库包含了各种可用的依赖库的信息和版本信息。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

161

2023.12.25

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

452

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

330

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

958

2023.07.05

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

578

2023.07.06

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

275

2023.07.24

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

4

2026.03.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
第二十四期_PHP8编程
第二十四期_PHP8编程

共86课时 | 3.5万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.6万人学习

第二十三期_PHP编程
第二十三期_PHP编程

共93课时 | 7.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号