Magento 2 comme exigence de développement de compositeur pour les extensions

8

Lors de l'écriture d'une extension, serait-il judicieux d'ajouter magento/project-community-editionà la require-devsection de composer.json?

L'idée derrière cela est qu'il ne faudrait qu'un composer installpour faire tourner une installation Magento complète pour le développement ou CI.

Pour configurer la base de données, j'ajouterais un script de post-installation avec bin/magento setup:install.

Pour utiliser les outils de test, vous devez copier les sections autoload-devet require-devdepuis, magento/project-community-editioncar elles ne sont utilisées qu'à partir de la racine, pas à partir des exigences.

Un inconvénient que je vois est que vous devrez changer la version requise pour tester sur plus de deux versions différentes (deux parce que vous pouvez spécifier une plage et installer une fois avec --prefer-lowest), mais c'est relativement facile à contourner.

Autre chose que je dois considérer?

Fabian Schmengler
la source

Réponses:

4

La réponse dépend de vos besoins en CI.

Pour les tests unitaires, je suis actuellement à la recherche de l'approche pour inclure uniquement dans la section requise les modules Magento réels que j'ai comme dépendance directe (que j'obtiens presque tous les modules de cette façon est de toute façon Magento à trier):

"require": {
  "magento/module-backend": "~100.0.2",
  "magento/module-sales": "~100.0.2"
}

Cela fonctionne bien pour une de mes extensions, voir Travis ici, mais rencontre un problème intéressant sur une autre extension où Magento devrait générer automatiquement une interface pour une maquette - détails ici.

Si vous cherchez au-delà des tests unitaires, je pense qu'il est logique d'avoir un environnement Magento pré-construit dans lequel vous installez l'extension plutôt que d'exécuter un script d'installation pour l'environnement Magento sur chaque build.

Kristof chez Fooman
la source
1

Semble raisonnable. 2 points à retenir:

  1. L'installation via le compositeur prend un certain temps
  2. Lorsque vous avez un tas de modules, il est assez inconfortable de prendre en charge / gérer la procédure d'installation dans CI avec des scripts uniques pour chaque module. Lorsque vous devez modifier quelque chose ici, vous devez modifier toutes les extensions dont vous disposez.

Une des façons de l'éviter pourrait être de conserver tout ce qui concerne la construction sur CI dans un référentiel séparé et de l'inclure dans les modules en tant que sous-dépôts.


Publié au nom de Peter Samoilov de aheadWorks car il n'est pas sur StackExchange. :)

Alexander Galtsow
la source
1

Il est logique d'inclure uniquement les modules Magento dont votre module a besoin:

  • Il est clair pour tout le monde de l'installer de quoi cela dépend, toute l'édition communautaire est trop large.
  • Vous voudrez probablement le tester à l'unité (et certains tests d'intégration), il n'a donc pas besoin d'une boutique en ligne fonctionnelle.
  • Les tests fonctionnels peuvent être créés dans le référentiel principal de votre boutique en ligne, car il est plus logique d'utiliser un frontend et de dépendre également de l'ensemble du cadre en tant que choses interconnectées.

Fondamentalement, votre module lui-même ne dépend pas de l'ensemble de l'édition communautaire, il ne dépend que d'une partie de celui-ci, c'est donc ce qu'il faut spécifier. De cette façon, vous pouvez toujours le tester, mais gardez également clair quelles sont les dépendances.

stefandoorn
la source
0

pas sûr à ce sujet. Ma première approche sera d'installer magento2 à partir d'une image docker pour exécuter tous les tests.

Cela vous donnera un test de fonctionnement env dans un temps assez court, mais vous devez créer une configuration plus spécifique à la construction que l'installation de tout via le compositeur, je pense.

David Verholen
la source