Article Image
read

Today’s blog post is about the autoload-dev configuration section in the root of composer.json file. This is almost identical to the autoload section, with optional child objects such as classmap, psr-0 and psr-4, and the optional files array. The only difference is when it has effect.

When the 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 vendor/autoload.php file. You can force composer to leave out the autoload-dev autoloaded namespaces and files by adding the --no-dev flag. 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 vendor/autoload.php scripts 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.

References:

Blog Logo

Hannes Van De Vreken


Published

Image

Hannes Van De Vreken

Working as a web developer. On his blog he writes about things he learned while experimenting with tools he might use to speed up his development.

Back to Overview