Magento 2: Arquivo Compositor Mínimo

9

Eu vi algumas coisas flutuando na Internet impermanente (ou seja, Twitter) que algumas alterações recentes no Magento 2 possibilitam a instalação de um módulo no diretório de fornecedores via compositor, e o Magento 2 verá seu módulo sem nenhum arquivo de linguagem simbólica. .

Se isso for verdade, existe um composer.jsonarquivo " mínimo " flutuando para os desenvolvedores de módulos usarem com seus módulos para permitir que os usuários do Magento 2 os instalem em seus sistemas?

Alan Storm
fonte
Você pode dar uma olhada no github.com/magento/magento2/pull/1206 . Ele permitiu que os módulos magento vivessem dentro do fornecedor, acredito.
Luke Rodgers

Respostas:

6

Atualizar

Parece que várias coisas mudaram com algumas alterações mais recentes (7 de outubro) no ramo de desenvolvimento. Agora parece que é possível oferecer suporte a um módulo que vive no diretório de fornecedores.

Criei dois exemplos de instalação de módulos. Um que copia arquivos para aplicativo / código e outro que registra o módulo em que reside no diretório do fornecedor.

Estratégia de cópia: https://github.com/mttjohnson/magento2-sample-module-minimal-copy Estratégia de registro: https://github.com/mttjohnson/magento2-sample-module-minimal-register

Para fins de desenvolvimento, acho que a utilização da estratégia de registro é mais útil, porque os arquivos que estão sendo executados pelo Magento podem ser diretamente modificados, testados e, em seguida, confirmados no repositório do módulo.

Resposta original

Se você tiver um composer.jsonarquivo para o pacote do compositor de módulo que contenha um tipo de magento2-modulearquivo, por padrão, será copiado para um diretório mapeado especificado no app/codediretório

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

Neste exemplo composer.json, o nome do pacote do compositor vendorname/module-nameresultará na inserção dos arquivos do pacote do compositor vendor/vendorname/module-name.

O tipo especial de magento2-moduleé implementado como um compositor-plugin no pacote magento / magento-compositer-installer . É por isso que eu listei na seção exigir. É este plugin do compositor que faz a cópia dos arquivos no app/codediretório magento apropriado .

A extra: {map: [["composerDir","MagentoDir"]]}seção é referenciada pelo instalador do compositor-plugin para saber qual parte do seu pacote compositor deve ser mapeada para qual parte da sua estrutura de diretórios magento. No exemplo fornecido, isso levaria vendor/vendorname/module-name/modulee copiaria os arquivos de lá para app/code/VendorName/ModuleName.

mttjohnson
fonte
é a seção do mapa aqui, certo? Pelo que entendi, essa solicitação pull o fez para que você não precisasse de um plug-in para usar o compositor com módulos Magento - que o Magento procuraria o fornecedor por conta própria. github.com/magento/magento2/pull/1206
Alan Storm
Lendo alguns dos comentários na parte inferior do PR que você mencionou, parece que, embora o PR tenha sido mesclado, ele não suporta totalmente os módulos que vivem na pasta de fornecedores do compositor.
23415 mttjohnson
1

Parece que algo assim deve funcionar.

{
    "name": "pulsestorm/module-name",
    "description": "A description of your extension",
    "authors": [
        {
            "name": "Robert Hoffner",
            "email": "[email protected]"
        }
    ],
    "require": {},
    "autoload": {
        "psr-4": {
            "Package\\Module\\": "src/path/to/Package/Module/Package/Module",
        },        
        "files": [
            "src/path/to/Package/Module/registration.php",
        ]
    }    
}

A chave aqui é a seção do carregador automático. Ele configura um carregador automático PSR-4 que aponta para os arquivos da sua classe e carrega automaticamente o seu registration.php. Quando o compositor solta os arquivos no fornecedor e gera novamente os arquivos de carregamento automático, o Magento deve poder ver seu módulo.

Um efeito colateral legal disso - o código não precisa mais estar presente app/code!

Alan Storm
fonte
Estou confuso com isso. Tudo o que li sobre a criação do meu próprio módulo me fez colocar meus arquivos no aplicativo / código. 1) Como isso funciona e 2) Por que isso é legal?
Kevando