Magento 2: минимальный файл композитора

9

Я видел несколько вещей, плавающих по непостоянному Интернету (например, Twitter), что некоторые недавние изменения в Magento 2 позволяют установить модуль в каталог поставщика через composer, и Magento 2 увидит ваш модуль без каких-либо ссылок на ссылки. ,

Если это правда, существует ли «минимальный composer.json» файл, который разработчики модулей могут использовать со своими модулями, чтобы позволить пользователям Magento 2 устанавливать их в свои системы?

Алан Сторм
источник
Возможно, вы захотите взглянуть на github.com/magento/magento2/pull/1206 . Это позволило модулям magento жить в рамках поставщика, я считаю.
Люк Роджерс

Ответы:

6

Обновить

Похоже, что некоторые вещи изменились с некоторыми последними изменениями (7 октября) в ветке разработки. Похоже, теперь можно поддерживать модуль, находящийся в каталоге vendor.

Я создал два примера установки модулей. Один, который копирует файлы в app / code, и другой, который регистрирует модуль, в котором он находится, в каталоге vendor.

Стратегия копирования: https://github.com/mttjohnson/magento2-sample-module-minimal-copy Стратегия регистрации: https://github.com/mttjohnson/magento2-sample-module-minimal-register

Для целей разработки я думаю, что использование стратегии регистрации более полезно, поскольку файлы, которые запускает Magento, могут быть непосредственно изменены, протестированы и затем переданы обратно в репозиторий модулей.

Оригинальный ответ

Если у вас есть composer.jsonфайл для вашего модуля composer package, который содержит тип, 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 выполняет копирование файлов в соответствующий app/codeкаталог magento .

На этот extra: {map: [["composerDir","MagentoDir"]]}раздел ссылается установщик composer-plugin, чтобы узнать, какую часть вашего пакета composer нужно сопоставить с частью структуры вашего каталога magento. В приведенном примере это займет vendor/vendorname/module-name/moduleи скопирует файлы оттуда в app/code/VendorName/ModuleName.

mttjohnson
источник
раздел карты здесь прав? Насколько я понимаю, этот пул-запрос позволил вам не использовать плагин для использования composer с модулями Magento - этот Magento будет искать поставщика самостоятельно. github.com/magento/magento2/pull/1206
Алан Шторм,
Прочитав некоторые комментарии внизу PR, который вы упомянули, похоже, что PR был объединен, и он не полностью поддерживает модули, находящиеся в папке поставщика композитора.
Mttjohnson
1

Похоже, что-то вроде этого должно сделать свое дело.

{
    "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!

Алан Сторм
источник
Я смущен этим. Все, что я читал о создании своего собственного модуля, заставляет меня помещать свои файлы в приложение / код. 1) Как это работает и 2) Почему это аккуратно?
Кевандо