如何排除Composer包内指定文件?用composer.json还是GitHub Action?
排除Composer包文件的两种实用方案
一、直接用composer.json配置排除(优先选这个)
Composer本身支持在composer.json里通过exclude字段指定不需要随包分发的文件/目录,这是最省心的方式,不用额外折腾CI流程。
配置示例直接抄就行:
{ "name": "你的厂商名/你的包名", "exclude": [ "tests/", "docs/", ".github/", "phpunit.xml.dist", "开发用的说明文档.md" ] }
- 这个字段只影响Composer打包发布的内容,仓库里的文件不会被删除,本地开发时该用照样用。
- 适合排除测试文件、文档、CI配置、开发辅助文件这类没必要给用户的内容。
二、用GitHub Action做预处理(复杂需求才用)
如果你的排除需求比较特殊,比如要根据条件删文件、改完内容再发布,才需要用GitHub Action做预处理。比如:
- 要删掉特定环境的配置文件
- 要压缩静态资源后再发
- 要清理带敏感信息的临时文件
给个简单的Action示例(发布前删指定文件):
name: 发布到Packagist on: release: types: [published] jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: 删除不需要的文件 run: | rm -rf tests/ rm -f .env.example - name: 更新Packagist uses: php-actions/composer@v6 with: command: publish args: --no-interaction
- 这种方式只会在CI环境里临时删文件,不会动GitHub仓库里的原始文件,只影响提交给Packagist的内容。
- 适合那些
exclude字段搞不定的复杂场景。
总结下
能靠composer.json的exclude解决的就优先用,简单高效;只有遇到动态处理之类的复杂需求,再考虑上GitHub Action。
内容的提问来源于stack exchange,提问作者112Legion
相关产品推荐
相关产品推荐

