Magento 2: Fichier Compositeur Minimum

9

J'ai vu quelques choses flotter sur Internet impermanent (c'est-à-dire Twitter) que certaines modifications récentes de Magento 2 permettent d'installer un module dans le répertoire du vendeur via Composer, et Magento 2 verra votre module sans aucun lien symbolique. .

Si cela est vrai, existe-t-il un composer.jsonfichier "minimum " flottant pour les développeurs de modules à utiliser avec leurs modules pour permettre aux utilisateurs de Magento 2 de les installer dans leurs systèmes?

Alan Storm
la source
Vous voudrez peut-être jeter un œil sur github.com/magento/magento2/pull/1206 . Cela a permis aux modules magento de vivre chez le fournisseur, je crois.
Luke Rodgers

Réponses:

6

Mise à jour

Il semble que plusieurs choses aient changé avec quelques derniers changements (7 octobre) dans la branche develop. Il semble désormais possible de prendre en charge un module résidant dans le répertoire des fournisseurs.

J'ai créé deux exemples d'installation de modules. Un qui copie les fichiers dans app / code et un autre qui enregistre le module où il réside dans le répertoire du fournisseur.

Stratégie de copie: https://github.com/mttjohnson/magento2-sample-module-minimal-copy Stratégie d'enregistrement: https://github.com/mttjohnson/magento2-sample-module-minimal-register

À des fins de développement, je pense que l'utilisation de la stratégie d'enregistrement est plus utile parce que les fichiers qui sont exécutés par Magento peuvent être directement modifiés, testés puis réintégrés dans le référentiel du module.

Réponse originale

Si vous avez un composer.jsonfichier pour votre package de compositeur de module qui contient un type de, magento2-modulealors les fichiers par défaut seront copiés dans un répertoire mappé spécifié dans le app/coderépertoire.

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

Dans cet exemple composer.json, le nom du package composer vendorname/module-nameentraînera le placement des fichiers du package composer vendor/vendorname/module-name.

Le type spécial de magento2-moduleest implémenté en tant que plugin compositeur dans le package magento / magento-composer-installer . C'est pourquoi je l'ai répertorié dans la section requise. C'est ce plugin compositeur qui copie les fichiers dans le app/coderépertoire magento approprié .

La extra: {map: [["composerDir","MagentoDir"]]}section est référencée par le programme d'installation du plug-in composer pour savoir quelle partie de votre package composer à mapper à quelle partie de la structure de votre répertoire magento. Dans l'exemple fourni, cela prendrait vendor/vendorname/module-name/moduleet copierait les fichiers à partir de là app/code/VendorName/ModuleName.

mttjohnson
la source
est la section de la carte ici à droite? Je croyais comprendre que cette demande de tirage en faisait que vous n'aviez pas besoin d'un plugin pour utiliser Composer avec des modules Magento - que Magento regarderait seul en tant que fournisseur. github.com/magento/magento2/pull/1206
Alan Storm
En lisant certains des commentaires au bas du PR que vous avez mentionné, il semble que, bien que le PR ait été fusionné, il ne prend pas entièrement en charge les modules vivant dans le dossier du fournisseur du compositeur.
mttjohnson
1

Il semble que quelque chose comme ça devrait faire l'affaire.

{
    "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 clé ici est la section du chargeur automatique. Il configure un chargeur automatique PSR-4 qui pointe vers vos fichiers de classe et charge automatiquement votre fichier registration.php. Lorsque composer dépose les fichiers chez le fournisseur et recrée les fichiers de chargement automatique, Magento devrait pouvoir voir votre module.

Un effet secondaire soigné de cela - le code n'a plus besoin d'être app/code!

Alan Storm
la source
Je suis confus par cela. Tout ce que je lis sur la création de mon propre module me fait mettre mes fichiers dans l'application / le code. 1) Comment ça marche et 2) Pourquoi est-ce bien?
kevando