Gestione delle dipendenze delle librerie dei moduli con il compositore


9

Ho trovato Dipendenze in un modulo personalizzato con drupal-compositore , Come posso includere una libreria di terze parti nel mio modulo personalizzato senza usare Composer Manager e Come gestire le dipendenze del compositore di moduli contrib su drupal 8 che sono ricollegate alla mia domanda, ma no sembrano essere più applicabili da Drupal 8.1 e dal deprezzamento del manager Composer .

Anche guide popolari come L'introduzione definitiva a D8 e Composer sembrano non essere più applicabili in quanto menzionano anche il direttore del compositore.

L'altra soluzione contraria al manager del compositore, altera il file core composer.json sembra un hacking troppo intenso e probabilmente si spezzerebbe con ogni aggiornamento Drush di Drupal core (?).

Più specificamente, sto tentando di aggiornare Views vCard da Drupal 7 a 8. Ho creato il mio file composer.json come segue:

{
  "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.*"
  }
}

Ma se inserisco un file composer.json nella mia cartella del modulo, come faccio a rendere Drupal consapevole che quel file è presente e come posso assicurarmi che la zipstream-phplibreria richiesta sia scaricata?

La semplice esecuzione composer updatedalla radice di Drupal aggiorna molte dipendenze di Drupal, ma non include i file composer.json che si trovano nelle cartelle dei moduli. Inoltre non presumo che dovrei chiamare composer installdall'interno di tutti i moduli con dipendenze.

Come faccio a sensibilizzare Drupal sulla dipendenza di un modulo senza usare il gestore del compositore e / o il core di hacking?

AGGIORNARE:

Il plug-in di unione compositore utilizzato da core sembra supportare un percorso jolly:

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

Perché il core non si fonde modules/*/composer.json, ciò risolverebbe tutto bene?

Aggiornamento 2:

Il ragionamento per non supportare questo è trattato in questo numero (che è stato in silenzio anche da qualche tempo).


1
La modifica del file principale del compositore è il modo corretto.
Eyal,

Se lasci che compositore gestisca tutte le tue dipendenze (core incluso), il problema scompare. Vedi packagist.org/packages/drupal/core
Eyal

Ecco un esempio di file del compositore che ho scritto per un'altra domanda: drupal.stackexchange.com/a/187097/40011
Eyal

Grazie per la risposta @Eyal. Quindi la gestione di tutti i moduli contrib tramite il composer.jsonfile è il nuovo modo consigliato e il drush per il download e l'installazione dei moduli viene sostituito? Ovviamente il compositore risolverà automaticamente le dipendenze nidificate e scaricherà anche le mie dipendenze.
Neograph734,

Risposte:


6

Nuovo metodo che utilizza drupal-scaffold per la massima flessibilità

Per Drupal 8.4.0 e versioni successive usando drush> 9.0.0 , drush make è deprecato e dovresti usare un flusso di lavoro a compositore come dettagliato nei collegamenti alla documentazione di drupal.org di seguito. Tali collegamenti raccomandano di utilizzare un progetto compositore, ma questo potrebbe non funzionare per l'installazione del server Web di tutti. Di seguito viene descritto passo passo come impostare composer.json manualmente per la spiegazione dei dettagli. Le istruzioni relative all'aggiunta manuale di moduli possono ancora essere eseguite.

# 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

Quindi devi aggiungere manualmente a composer.json quanto segue in base alle tue preferenze perché non c'è modo di farlo automaticamente con il compositore così com'è. Questi configureranno drupal-scaffold per installare i tuoi moduli dove li desideri (al contrario di nel fornitore / o in una directory scelta da qualche altro sviluppatore). Cambia "webroot" in "www" o "pubblico" o in cosa sia il tuo host.

    "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"
    }

Ora puoi installare alcune dipendenze. Si noti che il compositore deve essere in grado di utilizzare script e plugin per farlo funzionare.

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

Esegui lo script drupal-scaffold una volta (o sul tuo server di build secondo necessità):

composer drupal-scaffold

Drupal core, moduli, temi, ecc ... possono essere installati secondo le istruzioni sottostanti senza drupal-merge-plugin.

composer require drupal/core:~8.5.1 drupal/views_vcards

Metodo precedente che utilizza drupal-merge-plugin o lavora direttamente con core

Per Drupal 8.1.0 e versioni successive, è possibile utilizzare il compositore per richiedere direttamente i moduli Drupal. La documentazione su Uso di Composer in un progetto Drupal e Uso di Composer per installare i pacchetti Drupal tramite Drupal.org è stata aggiornata per sfruttare il packagist di drupal.org. Trovo che funzioni bene già in uno scenario di distribuzione.

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

Per lo sviluppo, penso che l'aggiunta manuale della dipendenza con composer requirefunzioni correttamente. L'approccio di unione funziona anche con il plugin drupal-merge e lo uso per il mio flusso di lavoro di Drush.

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

Aggiornamento 2016.06.22

Ho riscontrato un problema con drush make, che ha aggiunto i tradizionali tag della versione di Drupal e gli URL packagist di drupal.org usando semver. A tal fine, ho dovuto passare all'utilizzo del packagist stabler su https://packagist.drupal-composer.org , che supporta ancora i tradizionali tag della versione di Drupal.

Si noti inoltre che il server di compilazione o la macchina richiede una quantità esorbitante di memoria per eseguire (o richiedere) un aggiornamento del compositore , che è necessario in tutti gli scenari in cui non è possibile eseguire l'aggiornamento del compositore su una macchina di sviluppo simile nel processo di compilazione.

Aggiornamento 2016.09.23

Aggiornamento 2018.03.30

  • Ho notato un voto positivo. Questo è piuttosto vecchio, quindi ho deciso di chiarire lo sviluppo più recente e di impostare il tuo sito direttamente con il compositore poiché Drush Make è stato (purtroppo) deprecato per un po '.

1
Sono ancora molto abituato ad usare Drush per scaricare e installare i moduli, ma questo sarà completamente sostituito con il compositore?
Neograph734,

Ecco come lo fa drupalci ora, ma prima puoi usare direttamente il plugin merge. La patch che ho scritto per drupalci inizialmente era drupal.org/files/issues/2597778-composer-contrib-18.patch . Questo è stato impegnato, ma ora non è più nella base di codici in quanto è semplificato usare il packagist e fare qualsiasi cosa dal compositore iirc. Faccio anche quanto segue con TravisCI: cgit.drupalcode.org/xero/tree/.travis.yml#n40 . Dipenderà dal tuo flusso di lavoro.
mradcliffe,

Forse vale la pena aggiungere qui una descrizione di Asset Packagist per le librerie di terze parti con Composer. Questa metodologia è stata adottata da diverse distribuzioni Drupal e diversi moduli contrib ora la stanno utilizzando anche. Ho appena contribuito con alcuni documenti per ufficializzare questa soluzione drupal.org/docs/develop/using-composer/… e drupal.org/docs/develop/using-composer/…
JamesWilson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.