How to ignore directories with Composer?
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.
This can be automated with post-update-cmd
the composer.json
file within the scripts
key:
"scripts": {
"post-update-cmd": [
"rm -rf vendor/aura/intl/tests vendor/cakephp/cakephp/tests"
],
},
Or use pattern to remove directories:
"scripts": {
"post-update-cmd": [
"find vendor/ -type d -regextype posix-extended -iregex '.*/(doc|docs|example|examples|test|tests|tmp)' -print -exec rm -r {} +"
],
},
This has been possible since Nov 11, 2015 with https://getcomposer.org/doc/04-schema.md#exclude-files-from-classmaps
Source: https://github.com/composer/composer/issues/4456#issuecomment-155825777
EDIT: Misinterpretation. The above only lets the autoloader ignore the specified paths, it does not actually prevent them from being copied to the filesystem upon install.