Magento 2: archivo mínimo de compositor

9

He visto algunas cosas flotando en Internet (es decir, Twitter) que algunos cambios recientes en Magento 2 hacen posible instalar un módulo en el directorio de proveedores a través del compositor, y Magento 2 verá su módulo sin ninguna tontería de enlaces simbólicos .

Si esto es cierto, ¿hay un composer.jsonarchivo "mínimo " flotando para que los desarrolladores de módulos utilicen con sus módulos para permitir que los usuarios de Magento 2 los instalen en sus sistemas?

Alan Storm
fuente
Es posible que desee echar un vistazo a github.com/magento/magento2/pull/1206 . Creo que permitió que los módulos de magento vivieran dentro del proveedor.
Luke Rodgers

Respuestas:

6

Actualizar

Parece que varias cosas cambiaron con algunos cambios más recientes (7 de octubre) en la rama de desarrollo. Ahora parece que es posible admitir un módulo que vive en el directorio de proveedores.

Creé dos ejemplos de instalación de módulos. Uno que copia archivos a la aplicación / código y otro que registra el módulo donde reside en el directorio de proveedores.

Estrategia de copia: https://github.com/mttjohnson/magento2-sample-module-minimal-copy Estrategia de registro: https://github.com/mttjohnson/magento2-sample-module-minimal-register

Para fines de desarrollo, creo que utilizar la estrategia de registro es más útil porque los archivos que ejecuta Magento se pueden modificar, probar y luego volver a enviar directamente al repositorio de módulos.

Respuesta original

Si tiene un composer.jsonarchivo para su paquete de compositor de módulos que contiene un tipo de magento2-module, por defecto, los archivos se copiarán en un directorio asignado específico en el app/codedirectorio.

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

En este ejemplo, composer.json, el nombre del paquete del compositor vendorname/module-namedará como resultado que se coloquen los archivos para el paquete del compositor vendor/vendorname/module-name.

El tipo especial de magento2-modulese implementa como un complemento de compositor en el paquete magento / magento-composer-installer . Es por eso que lo he enumerado en la sección de requisitos. Es este plugin de compositor el que copia los archivos en el app/codedirectorio magento apropiado .

El extra: {map: [["composerDir","MagentoDir"]]}instalador del complemento de compositor hace referencia a esta sección para saber qué parte de su paquete de compositor se debe asignar a qué parte de su estructura de directorios de magento. En el ejemplo proporcionado, esto tomaría vendor/vendorname/module-name/moduley copiaría archivos de allí a app/code/VendorName/ModuleName.

mttjohnson
fuente
es la sección del mapa aquí, ¿verdad? Entendí que esta solicitud de extracción hizo que no necesitara un complemento para usar el compositor con módulos de Magento, que Magento buscaría en el proveedor por sí solo. github.com/magento/magento2/pull/1206
Alan Storm
Al leer algunos de los comentarios en la parte inferior del RP que mencionó, parece que aunque el RP se fusionó, no es totalmente compatible con los módulos que viven en la carpeta del vendedor del compositor.
mttjohnson
1

Parece que algo como esto debería hacer el truco.

{
    "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",
        ]
    }    
}

La clave aquí es la sección del autocargador. Configura un autocargador PSR-4 que apunta a los archivos de tu clase y carga automáticamente tu registration.php. Cuando el compositor coloca los archivos en el proveedor y vuelve a generar los archivos de carga automática, Magento debería poder ver su módulo.

Un buen efecto secundario de esto: ¡el código ya no necesita estar app/code!

Alan Storm
fuente
Estoy confundido por esto. Todo lo que leo sobre la creación de mi propio módulo me obliga a poner mis archivos en la aplicación / código. 1) ¿Cómo funciona esto? Y 2) ¿Por qué está bien?
kevando