Answers:
看起来有些事情随着developer分支中的一些最新更改(10月7日)发生了变化。现在看来,可以支持供应商目录中的模块了。
我创建了两个安装模块的示例。一个将文件复制到应用程序/代码,另一个将文件驻留在供应商目录中的模块注册。
复制策略:https : //github.com/mttjohnson/magento2-sample-module-minimal-register 注册策略:https : //github.com/mttjohnson/magento2-sample-module-minimal-register
出于开发目的,我认为利用注册策略更有用,因为可以直接修改,测试并随后将由Magento运行的文件提交回模块存储库。
如果您composer.json
的模块编辑器软件包的文件包含的类型,magento2-module
则默认情况下,文件将被复制到目录中指定的映射目录中app/code
。
{
"name": "vendorname/module-name",
"type": "magento2-module",
"require": {
"magento/magento-composer-installer": "*"
},
"extra": {
"map": [
[
"module",
"VendorName/ModuleName"
]
]
}
}
在此示例composer.json中,composer软件包名称vendorname/module-name
将导致将composer软件包的文件放入vendor/vendorname/module-name
。
的特殊类型magento2-module
通过magento / magento-composer-installer软件包中的composer-plugin实现。这就是为什么我在require部分列出了它的原因。正是这个composer-plugin将文件复制到适当的magento app/code
目录中。
该extra: {map: [["composerDir","MagentoDir"]]}
部分由作曲家插件安装参考知道映射你的作曲家包的一部分,你的Magento目录结构的哪一部分。在提供的示例中,该操作会将vendor/vendorname/module-name/module
文件从那里复制到app/code/VendorName/ModuleName
。
看起来像这样的事情应该可以解决问题。
{
"name": "pulsestorm/module-name",
"description": "A description of your extension",
"authors": [
{
"name": "Robert Hoffner",
"email": "rhoffner@example.com"
}
],
"require": {},
"autoload": {
"psr-4": {
"Package\\Module\\": "src/path/to/Package/Module/Package/Module",
},
"files": [
"src/path/to/Package/Module/registration.php",
]
}
}
这里的关键是自动加载器部分。它设置了一个指向您的类文件的PSR-4自动加载器,并自动加载registration.php
。当composer将文件放入供应商并重新生成自动加载文件时,Magento应该能够看到您的模块。
这样做的一个很好的副作用-不再需要包含代码app/code
!