如何在执行composer install时获取生产环境版本的软件包?
解决Composer Vendor文件夹文件过多的生产环境存储问题
Composer绝对是PHP开发圈的一大福音,自打它出来,依赖管理的工作简直轻松了不止一个档次。但用过的朋友肯定都遇到过这个糟心的问题:执行完composer install生成的vendor文件夹里,塞满了一堆只对开发有用、放到生产服务器上纯占地方的文件。
尤其是虚拟主机这种环境,inode配额本来就有限,而且大部分虚拟主机还没装Composer,你只能手动上传整个vendor文件夹。要是单个项目的vendor就有6000+文件,多搞几个项目下来,inode直接告急,更别说里面还混着大量README.md、TODO这类完全没必要出现在生产环境的文件,看着都头疼。
下面分享几个实用的解决办法,帮你把vendor文件夹“瘦”下来:
一、用Composer生产环境专属命令安装
直接在本地执行这条命令,从根源上减少冗余文件:
composer install --no-dev --optimize-autoloader --classmap-authoritative
--no-dev:跳过require-dev里的开发依赖,直接砍掉一大波不必要的包和文件--optimize-autoloader:优化自动加载器,生成更高效的类映射,同时清理掉安装过程中产生的临时文件--classmap-authoritative:让Composer认定类映射是完整的,不再去额外查找文件,既提升运行效率,也减少了潜在的冗余文件
二、手动批量清理冗余文件
如果已经安装完了,也可以手动清理那些没用的内容:
- 删掉所有README.md、CHANGELOG.md、TODO、LICENSE(如果不需要保留版权信息的话)、.gitignore这类非代码文件
- 移除各个依赖包中的
tests、docs、examples、.github这类仅用于开发或文档的目录
可以写个简单的shell脚本一键处理:
# 删除冗余文件 find vendor -type f \( -name "README*" -o -name "CHANGELOG*" -o -name "TODO*" -o -name "LICENSE*" -o -name ".gitignore" -o -name ".gitattributes" \) | xargs rm -rf # 删除冗余目录 find vendor -type d \( -name "tests" -o -name "test" -o -name "docs" -o -name "examples" -o -name ".github" \) | xargs rm -rf
⚠️ 提醒:运行前最好先备份vendor文件夹,避免误删必要文件。
三、用Composer插件自动清理
嫌手动麻烦的话,可以用专门的插件帮你自动处理,比如ergebnis/composer-cleaner:
- 先在本地安装这个开发依赖:
composer require --dev ergebnis/composer-cleaner
- 之后执行生产环境安装时,插件会自动按照预设规则清理冗余文件和目录,完全不用你操心。
额外小技巧:压缩后上传再解压
要是优化后还是有不少文件要传,可以先把vendor文件夹压缩成zip包,上传到服务器后再解压。这样不仅减少了文件传输的次数,还能避免上传过程中出现文件丢失或损坏的问题。
内容的提问来源于stack exchange,提问作者Bob2425
相关产品推荐
相关产品推荐

