Composer不内置自动删除测试文件功能,但可通过--no-dev选项跳过开发依赖、使用eloquent/composer-cleaner插件配置排除路径、自定义post-autoload-dump脚本或CI/CD中find命令清理vendor内tests等冗余目录来实现。

Composer 本身不提供“安装后自动删除测试文件”的内置功能,但可以通过组合使用 composer install 的选项、自定义脚本和第三方插件来实现类似效果。核心思路是:在包安装完成后,主动移除不需要的目录(如 tests/、examples/、docs/ 等),同时确保不影响运行时依赖。
使用 composer install --no-dev 减少非生产文件
这是最基础也最有效的一步。开发依赖(包括测试框架、工具类库)及其相关文件(如 phpunit 的配置、测试用例)默认不会被安装到生产环境:
-
--no-dev会跳过require-dev中声明的包,自然也就不会下载它们附带的测试/文档等资源 - 配合
"minimum-stability": "stable"和"prefer-stable": true可进一步避免不稳定版本中混入调试用内容 - 注意:这不会清理已安装包内部自带的
tests/目录(比如monolog/monolog自身的tests/文件夹仍会存在)
启用 extra > composer-cleaner 插件(推荐)
社区主流方案是使用 bamarni/composer-bin-plugin 或更直接的 maglnet/ComposerRequireChecker?不对——真正专注“清理包内冗余文件”的是:ergebnis/composer-normalize 不干这事;正确答案是:johnstevenson/composer-cleanup 或更活跃维护的:symfony/flex(仅限 Symfony 项目)?其实最通用的是:
eloquent/composer-cleaner —— 它允许你在 composer.json 中声明要从所有已安装包中删除的路径模式:
- 安装插件:
composer require --dev eloquent/composer-cleaner - 在
composer.json的extra段添加规则:
"extra": {
"cleaner": {
"exclude": [
"/tests/",
"/Tests/",
"/test/",
"/Test/",
"/examples/",
"/docs/",
"/documentation/",
"/.github/",
"/.git/",
"/CHANGELOG.md",
"/README.md",
"/LICENSE"
]
}
}
登录后复制
下次执行 composer install 或 composer update 后,插件会自动扫描 vendor/ 下每个包,匹配并删除符合规则的文件与目录。
自定义 post-autoload-dump 脚本(轻量可控)
如果你倾向零依赖、完全自主控制,可在 composer.json 中注册一个清理脚本,在自动加载生成后执行:
标签: php linux js git json docker composer windows github 工具 mac
还木有评论哦,快来抢沙发吧~