Magento 2: Minimum Composer File

Update

It looks like several things changed with some latest changes (October 7th) in the develop branch. It now looks like it's possible to support a module living in the vendor directory.

I created two examples of installing modules. One that copies files to app/code and another that registers the module where it resides in the vendor directory.

Copy Strategy: https://github.com/mttjohnson/magento2-sample-module-minimal-copy Registration Strategy: https://github.com/mttjohnson/magento2-sample-module-minimal-register

For development purposes I think utilizing the registration strategy is more useful because the files that are being run by Magento can be directly modified, tested and then committed back to the module repo.

Original Answer

If you have a composer.json file for your module composer package that contains a type of magento2-module then by default files will get copied over to a specified mapped directory in the app/code directory.

{
    "name": "vendorname/module-name",
    "type": "magento2-module",
    "require": {
        "magento/magento-composer-installer": "*"
    },
    "extra": {
        "map": [
            [
                "module",
                "VendorName/ModuleName"
            ]
        ]
    }
}

In this example composer.json the composer package name vendorname/module-name will result in the files for the composer package getting placed in vendor/vendorname/module-name.

The special type of magento2-module is implemented as a composer-plugin in the magento/magento-composer-installer package. That is why I have listed it in the require section. It is this composer-plugin that does the copying of files over into the appropriate magento app/code directory.

The extra: {map: [["composerDir","MagentoDir"]]} section is referenced by the composer-plugin installer to know what part of your composer package to map to what part of your magento directory structure. In the example provided this would take vendor/vendorname/module-name/module and copy files from there to app/code/VendorName/ModuleName.