I'd like to release a PHP library and submit it on Packagist to have it installable via Composer.
My library has the following structure:
lib/ tests/ composer.json README.md
Basically, whenever I include this library in a project's composer.json
, I'd like everything to be copied with the exception of the tests
directory, which is cumbersome and is only needed when developing the library itself. It's just a waste of space otherwise (especially when packaging the project for production).
Is it possible to exclude this directory from the library's composer.json
?
This is not possible in Composer. However, there are some ways to do it:
When you run the update or install command with --prefer-dist
, Composer tries to download the archive on github. You can remove the test directory from the archives by putting this in a .gitattributes
file in the root directory of your project:
Tests/ export-ignore
Composer will only use the tags on github. Just temporary remove the tests directory when creating a tag will also do the trick.
It's possible to control the archive creation by adding exclude patterns in the composer.json
file within the archive
key. See https://getcomposer.org/doc/04-schema.md#archive for details.
The example given (cited from above URL):
{ "archive": { "exclude": ["/foo/bar", "baz", "/*.test", "!/foo/bar/baz"] } }
The example will include
/dir/foo/bar/file
,/foo/bar/baz
,/file.php
,/foo/my.test
but it will exclude/foo/bar/any
,/foo/baz
, and/my.test
.
That way you have about the same control that .gitattributes
would give you, without having to use Git or affecting any processes that require different settings in said file.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With