Name your component
You give a name to your component in its composer.json and module.xml files. These files also contain other required configuration parameters, such as the module’s schema version.
Prerequisites
Before you continue, make sure you have completed all of the following tasks:
- Create a file structure.
- Create the configuration files you’ll need.
- Register your component.
Add the component’s module.xml file
Declare the component itself by adding a module.xml file in the /etc folder of your component.
A component declares itself (that is, defines its name and existence) in the module.xml file, located in the Magento install directory at <ComponentName>/etc/.
The smallest working module.xml file would look something like this:
1
2
3
4
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Vendor_ComponentName"/>
</config>
The name parameter defines the name of your component. It is required for all components. If you do not use Declarative Schema to help manage the installation and upgrade processes for your component, then you must also add the setup_version parameter to the module line. Set the setup_version value to your module’s database schema version. Omit the setup_version parameter if you use Declarative Schema.
Avoid using “Ui” for your custom module name, because the %Vendor%_Ui notation, required when specifying paths, might cause issues.
Add the component’s composer.json file
composer.json provides a component name and also specifies component dependencies.
In addition, the Component Manager looks for a composer.json in a component’s root directory and can perform actions on the component and its dependencies:
- If a component has
composer.jsonand the component was installed using Composer (including from packagist, the Magento Marketplace, or other source), the Component Manager can update, uninstall, enable, or disable the component. - If the component has
composer.jsonbut was not installed using Composer (for example, custom code a developer wrote), Component Manager can still enable or disable the component. - We strongly recommend you include
composer.jsonin your component’s root directory whether or not you intend to distribute it to other Magento merchants.
Refer to Module version dependencies to determine versioning requirements.
Example composer.json file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
"name": "your-name/module-Acme",
"description": "Test component for Magento 2",
"require": {
"php": "~7.1.3||~7.2.0",
"magento/module-store": "102.1",
"magento/module-catalog": "102.1",
"magento/module-catalog-inventory": "102.1",
"magento/module-ui": "self.version",
"magento/magento-composer-installer": "*"
},
"suggest": {
"magento/module-webapi": "102.1"
},
"type": "magento2-module",
"version": "102.1",
"license": [
"OSL-3.0",
"AFL-3.0"
],
"autoload": {
"files": [ "registration.php" ],
"psr-4": {
"Magento\\CatalogImportExport\\": ""
}
}
}
In this example:
nameis the name of your component.descriptionis a concise explanation of your component’s purpose.requirelists any components your component depends on.suggestlists soft dependencies. The component can operate without them, but if the components are active, this component might impact their functionality.Suggestdoes not affect component load order.typedetermines what the Magento component type. Choose from magento2-theme, magento2-language, or magento2-module.versionlists the version of the component.licenselists applicable licenses that apply to your component.autoloadinstructs Composer to load the specified files.
Magento does not currently support the path repository.