savinmikhail / dist-size-optimizer
Optimizes your package distribution size by automatically managing .gitattributes export-ignore rules
Requires
- php: ^8.2
- symfony/console: ^7.2
- symfony/finder: ^7.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.75
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^10.5
- phpyh/coding-standard: ^2.6
- rector/rector: ^2.0
- savinmikhail/add_named_arguments_rector: ^0.1.16
- symfony/var-dumper: ^7.2
README
A command-line tool that helps you optimize your package distribution size by automatically managing .gitattributes
export-ignore rules.
Note: This package was previously known as
export-ignore-check
. The functionality remains the same, but the name better reflects its purpose of optimizing distribution size.
Why?
When you publish a package to Packagist, Composer creates a distribution archive using git archive
. Files and directories that are not needed in production (like tests, documentation, CI configs) should be excluded using .gitattributes
export-ignore to:
- Reduce package size
- Speed up installation
- Improve CI/CD pipeline performance
- Keep production packages clean
This tool helps you identify what should be excluded and can automatically fix your .gitattributes
file.
Installation
composer require savinmikhail/dist-size-optimizer
Usage
Check Current Project
To check your current project (recommended during development):
vendor/bin/dist-size-optimizer check
This will:
- Create a git archive of your project (simulating Packagist's distribution)
- Scan for files that should be excluded
- Show you what to add to your
.gitattributes
file - Automatically append the suggested patterns to your
.gitattributes
file
Note: When checking your current project, the tool uses
git archive HEAD
, which means it only includes committed changes. Make sure to commit your changes before running the check to get accurate results.
Check Any Package
To check any package from Packagist:
vendor/bin/dist-size-optimizer check vendor/package
For example:
vendor/bin/dist-size-optimizer check symfony/console
Output Options
Dry Run
By default, the tool will automatically append suggested patterns to your .gitattributes
file. Use --dry-run
to only see what would be added without making any changes:
vendor/bin/dist-size-optimizer check --dry-run
JSON Output
Add --json
flag to get machine-readable output:
vendor/bin/dist-size-optimizer check --json
Custom Config
By default, the tool uses a predefined set of patterns to check. You can provide your own config file:
vendor/bin/dist-size-optimizer check --config=/path/to/config.php
# or using short option
vendor/bin/dist-size-optimizer check -c /path/to/config.php
The config file should be a PHP file that returns an array of patterns to check:
<?php return [ 'tests/', '.gitignore', // ... your patterns ];
Example Output
Directories that should be excluded using export-ignore:
• `/tests/`
• `/docs/`
• `/.github/`
Files that should be excluded using export-ignore:
• `/.gitignore`
• `/.editorconfig`
• `/phpunit.xml.dist`
• `/README.md`
To fix this, add the following lines to your `.gitattributes` file:
/tests/ export-ignore
/docs/ export-ignore
/.github/ export-ignore
/.gitignore export-ignore
/.editorconfig export-ignore
/phpunit.xml.dist export-ignore
/README.md export-ignore
🌿 Your package size could be reduced by approximately 2.5 MB!
🚀 This improves installation time, reduces archive size, and helps CI/CD pipelines.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.