跳转到主内容
极星编程网:以代码为星,赴技术山海!

如何让 Composer 在安装后自动删除不必要的文件(如测试文件)?

Composer 不会自动清理测试文件等冗余内容,推荐使用 eloquent/composer-cleaner 插件或自定义 post-install-cmd 脚本实现安装后自动清理,避免误删核心文件。 Composer 本身不会自动删除测试文件、文档或开发用资源,但可以通过配置
composer.json
中的
archive
和
installer-paths
相关机制,配合插件或脚本,在安装/更新后清理冗余内容。最常用且可靠的方式是使用 composer-cleaner 或更轻量的
scripts
+
post-autoload-dump
钩子。 启用 Composer 的 archive 配置(适用于包作者) 如果你是包的维护者,可以在自己的
composer.json
中定义哪些路径不参与打包(比如发布到 Packagist 时): 添加
"archive": {"exclude": ["/tests/", "/Tests/", "phpunit.xml", "README.md", ".gitignore"]}
该配置只影响
composer archive
命令或 Packagist 自动生成的 ZIP 包,不影响本地
composer install
对项目依赖的“安装后清理”无直接作用,但能减少远程包体积 在项目中自动清理已安装包的冗余文件 推荐使用 eloquent/composer-cleaner 插件,它专为这个场景设计: 运行
composer require --dev eloquent/composer-cleaner
默认会删掉
tests/
、
Tests/
、
docs/
、
.travis.yml
、
phpunit.xml
等常见开发文件 支持自定义规则:在
composer.json
加入
"extra": {"cleaner": {"exclude": ["/examples/", "/benchmarks/"]}}
安装/更新后自动触发,无需额外命令 用 post-install-cmd 脚本手动清理(轻量替代方案) 不引入插件时,可写一个简单 shell 脚本配合 Composer 钩子: GitHub Copilot GitHub AI编程工具,实时编程建议 下载 创建
bin/clean-vendor.sh
,内容如:
find vendor/ -name "tests" -type d -prune -exec rm -rf {} + 2>/dev/null
find vendor/ -name "*.md" -path "vendor/*/*" -delete 2>/dev/null
在
composer.json
中添加:
"scripts": {"post-install-cmd": ["sh bin/clean-vendor.sh"], "post-update-cmd": ["sh bin/clean-vendor.sh"]}
注意:Windows 用户需改用 PowerShell 或
robocopy
替代方案,或用跨平台工具如
rm -rf
(通过 Git Bash 或 WSL) 注意事项和常见误区 有些做法看似合理但实际有风险: 不要盲目删
vendor/autoload.php
或
composer.lock
相关文件——它们是运行必需的 避免在
post-autoload-dump
中清理,因为此时 autoloader 尚未完全生成,可能误删正在扫描的目录 CI/CD 环境中建议保留测试文件(如 GitHub Actions 运行单元测试),清理仅用于生产部署 某些包(如 Laravel 的
framework
)自带
laravel/framework
的优化安装逻辑,无需额外清理 基本上就这些。用
composer-cleaner
是最省心的选择;若追求极简,手写脚本也够用。关键是别动核心结构,只清明确无用的开发附属内容。

相关文章