跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

composer怎么使用已有的vendor而不重新下载?

composer install 默认复用 vendor 中匹配 composer.lock 的包,不重装已存在且版本一致的依赖;若版本或校验值不符则删除重装,非跳过而是校准。 composer install 时跳过下载,复用现有 vendor 直接运行
composer install
就行——它默认不重装已有包,只按
composer.lock
精确还原依赖树。前提是
vendor/
里已存在对应版本的包,且
composer.lock
没变。 常见错误现象:
composer update
被误用,导致所有包升级、重新下载;或删了
vendor/
却没删
composer.lock
,再跑
install
反而全量重拉。 必须确保
composer.lock
文件存在且未被修改(比如 git checkout 后没覆盖本地 lock) 如果
vendor/
里有包但版本和 lock 不符,
install
会删掉旧版、重装匹配版——不是“跳过”,而是“校准”
composer install --no-install
是无效命令;
--no-scripts
或
--no-plugins
不影响下载行为 为什么 vendor 里有包,composer install 还是重下? 本质是版本对不上:Composer 不看文件是否存在,只比对
composer.lock
中记录的 hash 和
vendor/
下实际安装包的 hash(或 dist zip 的校验值)。哪怕只是改了一行 README,hash 就失效。 使用场景:CI 构建中想缓存 vendor 目录,但每次仍重下——大概率是 lock 文件在构建过程中被更新(比如有人提交了新 lock),或缓存没带 lock 一起恢复。 检查
composer.lock
时间戳和内容是否与预期一致(
git status composer.lock
) 运行
composer install -v
,看输出里是否有
Installing xxx (1.2.3)
——有就说明在装,不是跳过 用
composer show xxx
查看已安装版本,对比 lock 里该包的
version
和
dist/shasum
想彻底禁用网络,强制用 vendor 里的东西 没有“强制离线模式”。Composer 设计上不支持跳过校验硬用旧文件——这是安全机制,防止篡改或损坏包被忽略。 Composer 2.9.6 Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。 下载 但可绕过网络请求:用
--no-network
参数,配合本地已有的完整 vendor + 匹配 lock,能避免任何 HTTP 调用。
composer install --no-network
:断网时若 vendor 和 lock 匹配,会成功;不匹配则报错退出,不会 fallback 到网络 不能和
--ignore-platform-reqs
混用——后者解决扩展缺失问题,和网络无关 注意:某些插件(如
hirak/prestissimo
)可能干扰离线行为,建议干净环境测试 vendor 目录结构被手动改过,还能复用吗? 不能。Composer 把
vendor/
当作完全受控目录,任何手动增删改(比如 cp 一个包进去、mv 改名、touch 写文件)都会破坏其内部状态。 典型症状:执行
composer install
后报
Package xxx is not installed
,或后续
autoload
找不到类。 唯一安全的手动操作是整个删除
vendor/
,再让 Composer 重建 若想“预填充” vendor(如内网部署),应使用
composer install --prefer-dist
+ 提前下载好 dist 包到
~/.composer/cache/files/
,而非直接塞进 vendor 自定义 autoloader 或 symlink 入口,别动 vendor 下的包目录结构 最常被忽略的一点:lock 文件里记录的是 dist 包的 shasum,不是 source 的 commit hash;所以即使你用 git clone 了一个包放进去,只要没走 Composer 安装流程,它就不认。

相关文章