Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to ignore directories with Composer?

Tags:

composer-php

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?

like image 777
BenMorel Avatar asked Jun 11 '13 16:06

BenMorel


Video Answer


2 Answers

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.

like image 144
Wouter J Avatar answered Sep 21 '22 23:09

Wouter J


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.

like image 24
Sven Avatar answered Sep 17 '22 23:09

Sven