Today’s blog post is about the
autoload-dev configuration section in the root of
This is almost identical to the
autoload section, with optional child objects such as
and the optional
files array. The only difference is when it has effect.
composer dump-autoload command is executed, by default both the autoload and autoload-dev sections of
your composer.json file have an effect on the resulting
You can force composer to leave out the autoload-dev autoloaded namespaces and files by adding the
When composer pulls in a depending package, it will automatically register all autoload sections
from the depending packages as well, but not the autoload-dev section.
The autoload-dev autoload sections are thus reserved for the package/application developers and not for the dependents.
As a package developer this is useful to create namespaces for stub classes, classes for fake object, etc… These classes can then be used in tests and will not be available to anyone who requires your project.
As an application developer I would still use this functionality just to make a difference between classes
that are only used in CI/testing and classes that are used in production.
This will also slightly reduce the number of namespaces registered in the
and thus increase performance on production. At least, that’s the theory.
This is not a brand new feature in composer, it has been available since the beginning of March 2014,
but it got released as part of the stable 1.0.0-alpha9 release from December 2014.
Lots of packages use this and I will try to get
laravel/framework to do the same.
Laravel’s test suite contains a lot of stub declarations in the root namespace
so it could clearly benefit from autoload-dev. But it’s a big refactor to extract them all out of the test files.
This post was the third composer blog post in a row. Previously I wrote about gitattributes and the –ignore-platform-reqs flag.
That’s all folks! Cheers.