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