web-dev-qa-db-fra.com

Gérer les dépendances de la bibliothèque de modules avec composer

J'ai trouvé Dépendances dans un module personnalisé avec drupal-composer , Comment puis-je inclure une bibliothèque tierce dans mon module personnalisé sans utiliser Composer Manager et Comment gérer les modules contrib composer dépendances sur drupal 8 qui sont reliées à ma question, mais ne semblent plus à appliquer depuis Drupal 8.1 et la dépréciation de Composer manager .

Des guides populaires tels que l'introduction définitive de D8 et Composer ne semblent plus s'appliquer car ils mentionnent également composer manager.

L'autre solution opposée au gestionnaire composer, modifier le fichier core composer.json ressemble à trop de piratage de noyau et romprait probablement avec chaque mise à jour Drush de Drupal core (?).

Plus précisément, j'essaie de mettre à jour Vues vCards de Drupal 7 à 8. J'ai créé mon fichier composer.json comme suit:

{
  "name": "drupal/views_vcards",
  "description": "Allows creation of vCards using the fields provided by the Views module.",
  "type": "drupal-module",
  "license": "GPL-2.0+",
  "homepage": "https://drupal.org/project/views_vcards",
  "require": {
    "maennchen/zipstream-php": "0.3.*"
  }
}

Mais si je mets un fichier composer.json dans mon dossier de module, comment puis-je faire Drupal conscient que ce fichier est là, et comment puis-je m'assurer que la bibliothèque zipstream-php Requise est téléchargé?

L'exécution simple de composer update À partir de la racine Drupal met à jour beaucoup de dépendances Drupal, mais elle n'inclut pas les fichiers composer.json qui sont dans les dossiers des modules. Je ne suppose pas non plus que je devrais appeler composer install de l'intérieur de tous les modules avec des dépendances.

Comment puis-je faire Drupal conscient de la dépendance d'un module sans utiliser composer manager et/ou hacking core?

MISE À JOUR:

Le plugin de fusion du composeur utilisé par le noya semble prendre en charge un chemin générique:

{
    "require": {
        "wikimedia/composer-merge-plugin": "dev-master"
    },
    "extra": {
        "merge-plugin": {
            "include": [
                "composer.local.json",
                "extensions/*/composer.json" // < ---- THIS LINE
            ],
            "require": [
                "submodule/composer.json"
            ],
            "recurse": true,
            "replace": false,
            "merge-dev": true,
            "merge-extra": false
        }
    }
}

Pourquoi le noyau ne fusionne-t-il pas modules/*/composer.json, Cela résoudrait tout correctement?

Mise à jour 2:

Le raisonnement pour ne pas soutenir cela est couvert dans ce problème (qui est également silencieux depuis un certain temps maintenant).

9
Neograph734

Nouvelle méthode utilisant un échafaudage Drupal pour une plus grande flexibilité

Pour Drupal 8.4.0 et versions ultérieures à l'aide de drush> 9.0.0 , drush make est déconseillé et vous devez utiliser un flux de travail de compositeur complet comme détaillé dans les liens de documentation drupal.org ci-dessous. Ces liens recommandent d'utiliser un projet composer, mais cela peut ne pas fonctionner pour la configuration du serveur Web de tout le monde. Ce qui suit est étape par étape comment configurer composer.json manuellement pour une explication détaillée. Les instructions concernant l'ajout manuel de modules peuvent toujours être effectuées.

# Initialize composer. Stability alpha is important for custom modules that may be source managed outside of packagist or drupal.org
composer init --name myvendor/mysite --stability=alpha --license=GPLv2
composer config repositories.drupal composer https://packages.drupal.org/8
composer config discard-changes true

Ensuite, vous devez ajouter à composer.json manuellement ce qui suit en fonction de vos préférences car il n'y a aucun moyen de le faire automatiquement avec composer tel quel. Ceux-ci configureront drupal-scaffold pour installer vos modules où vous les voulez (par opposition à dans le fournisseur/ou dans un répertoire choisi par un autre développeur). Remplacez "webroot" par "www" ou "public" ou quel est votre hôte.

    "extra": {
        "installer-paths": {
            "webroot/core": ["type:drupal-core"],
            "webroot/modules/contrib/{$name}": ["type:drupal-module"],
            "webroot/modules/custom/{$name}": ["type:drupal-custom-module"],
            "webroot/themes/contrib/{$name}": ["type:drupal-theme"],
            "webroot/themes/custom/{$name}": ["type:drupal-custom-theme"],
            "webroot/profiles/{$name}": ["type:drupal-profile"],
            "webroot/libraries/{$name}": ["type:drupal-library"]
        },
        "patches": {}
    },
    "scripts": {
        "drupal-scaffold": "DrupalComposer\\DrupalScaffold\\Plugin::scaffold"
    }

Vous pouvez maintenant installer certaines dépendances. Notez que composer doit pouvoir utiliser des scripts et des plugins pour que cela fonctionne.

composer require composer/installers:^1.4.0 drupal-composer/drupal-scaffold:^2.3.0 cweagans/composer-patches:^1.6.2

Exécutez le script drupal-scaffold une fois (ou sur votre serveur de build si nécessaire):

composer drupal-scaffold

Le noyau Drupal, les modules, les thèmes, etc ... peuvent être installés selon les instructions ci-dessous sans le plugin drupal-merge-plugin.

composer require drupal/core:~8.5.1 drupal/views_vcards

Ancienne méthode utilisant drupal-merge-plugin ou travaillant directement avec le noyau

Pour Drupal 8.1.0 et versions ultérieures, vous pouvez utiliser composer pour exiger directement les modules Drupal. La documentation autour de tilisation de Composer dans un projet Drupal et tilisation de Composer pour installer les packages Drupal via Drupal.org a été mis à jour pour profiter du packagist de drupal.org. Je trouve que cela fonctionne déjà bien dans un scénario de déploiement.

composer config repositories.drupal composer https://packages.drupal.org/8
composer require drupal/views_vcards

Pour le développement, je pense que l'ajout manuel de la dépendance avec composer require Fonctionne très bien. L'approche de fusion fonctionne aussi avec le plugin drupal-merge-plugin et je l'utilise pour mon flux de travail drush make.

composer config repositories.drupal composer https://packages.drupal.org/8
composer require mile23/drupal-merge-plugin
composer update

Mise à jour 2016.06.22

J'ai rencontré un problème avec drush make, qui a ajouté les balises de version traditionnelles Drupal et les URL de paquetage drupal.org à l'aide de semver. À cette fin, j'ai dû passer à l'utilisation du packagist stabler sur https://packagist.drupal-composer.org , qui prend toujours en charge les balises de version traditionnelles Drupal.

Notez également que le serveur ou la machine de génération nécessite une quantité de mémoire exorbitante pour effectuer une mise à jour composer (ou nécessite), ce qui est nécessaire dans tous les scénarios où l'exécution de la mise à jour composer sur une machine de développement similaire n'est pas possible dans votre processus de génération.

Mise à jour 2016.09.23

Mise à jour 2018.03.30

  • A remarqué un vote positif. C'est assez ancien, alors j'ai décidé de clarifier les développements plus récents et de configurer votre site directement avec composer car drush make est (malheureusement) obsolète depuis un certain temps.
6
mradcliffe