I’ve recently allowed my open source time to become monopolized by a bunch of data scraping and analysis. I managed to pull together around 3400 composer.json files for Magento modules hosted on packagist. My primary interest was in their autoloader section, but then I remembered Magento’s toying around with using Composer’s nebulous extra field field for things. The intention of this field is to hold data available for composer’s script commands, but it turns out it gets overloaded for a lot of different things.
Here’s some of what I found.
Maps
The map section looks like this
"extra": {
"map": [
[
"*",
"Magento/DebugComment"
]
]
}
"extra": {
"map": [
[
"pub",
"..\/..\/pub"
]
]
}
This is an old Magento 2 experiment where their composer installer (runs after a composer create-project) would use this data to copy your package from its home in vendor/foo/bar into the app/code folder where it would be subject to Magento’s original module loading and autoloader. Just prior to Magento 2’s release this system was scrapped in favor of the psr-4 and files:['registration.php'] system that’s in favor today.
This functionality is still available in some limited form in Magento 2 today — the files in the magento/magento2-base package are copied into your root project folder this way. The app/code folder also remains available, but it doesn’t seems like something Magento’s paying attention to.
Branch Alias
Another thing you might find in the extra section of a package’s composer.json file in a branch-alias field.
"extra": {
"branch-alias": {
"dev-master": "1.0-dev"
}
}
This one isn’t a Magento specific thing — it’s composer standard. Take note that despite the docs mentioning
Arbitrary extra data for consumption by scripts
that even the composer creators couldn’t resist their little blob of arbitrary data.
Patches
Another thing you might see in a Magento package’s composer.json file is a patches section.
"extra": {
"patches": {
"magento/framework": {
"102.0.2": [
{
"title": "[MAGENTO-22829] Cache locking issue",
"url": "https://dl.trollweb.no/m2-patch-composer/MAGENTO-22829/MAGENTO-22829-framework.patch",
"sha1": "b1adb7daa748d4f52a37cbd856c0f2bb503b03c1"
}
]
},
"magento/module-config": {
"101.1.2": [
{
"title": "[MAGENTO-22829] Cache locking issue",
"url": "https://dl.trollweb.no/m2-patch-composer/MAGENTO-22829/MAGENTO-22829-module-config.patch",
"sha1": "aa87f017e5306140038672dd1d808ff3fae751e4"
}
]
}
}
}
This one isn’t a Magento Inc. invention — it’s a system from the PHP community that lets you provide patches to other package files in your projects. It was en-vogue in the Magento community for a bit, and still seems like a recommended thing by Magento support.
Despite being popular among a certain set, this one always seemed like madness to me — a .patch file (event in 2015) seems like an archaic way to modify system behavior. It’s just formalized core editing.
Magento Force
You might see a magento-force field
"extra": {
"magento-force": "override"
}
This one seems to be related to the above map functionality, and provides some sort instructions on what to do when map copies files from your package into the main Magento installation.
Exclude
I also found an exclude field.
"extra": {
"exclude": [
"phpcs.xml"
]
},
I’m honestly not sure what this one case was/is for. The phpcs.xml file is related to the PHP_CodeSniffer project — but what it’s doing in the extra.exclude field eludes me.
Module Data
You also might see something like these two outliers
"extra": {
"swissup": {
"links": {
"store" : "https://swissuplabs.com/magento-2-easy-catalog-images.html",
"download" : "https://swissuplabs.com/subscription/customer/products/",
"docs" : "http://docs.swissuplabs.com/m2/extensions/easycatalogimages/",
"changelog": "http://docs.swissuplabs.com/m2/extensions/easycatalogimages/changelog/"
}
}
}
"extra": {
"vaimo-module-category": "Integration"
},
Here, the extension creators (swissup, vaimo) are using the extra section as their own arbitrary data store for reasons unknown to us.
Arbitrary data blobs are the processed sugar of the programming world.