web-dev-qa-db-fra.com

Mettre à jour les packages avec composer et savoir quoi mettre à jour

Je commence tout juste à travailler avec Drupal 8 et composer et j'essaie de comprendre comment le workflow de mise à jour devrait fonctionner. Je connais les bases de administrer un serveur Drupal 7 pendant des années, mais la partie Composer me fait trébucher).

En ce moment, je lance, à partir du dossier racine de mon Drupal, (avec le mode de maintenance activé) composer outdated et j'obtiens une liste de paquets nécessitant une mise à jour.
Pour autant que je puisse en juger d'après la documentation, je ne devrais mettre à jour que les paquets commençant par "drupal /". En supposant que la console et le noyau sont obsolètes, je lance composer update drupal/console drupal/core --with-dependencies et qui tire vers le bas les mises à jour, et fait son travail. Après cela, si je lance composer outdated encore une fois, je vois encore un tas de paquets qui sont obsolètes selon le compositeur. Est-ce prévu? Ou ces packages devraient-ils être mis à jour?

Je suppose que Drupal est construit en utilisant des versions spécifiques de packages, donc la mise à jour de tous casserait probablement certaines choses, non? Comment quelqu'un est-il censé savoir quels packages devraient être mis à jour et lesquels devraient rester à une version spécifique?

Voici ce que j'obtiens lorsque je lance composer outdated.

alchemy/zippy                         0.4.3       0.4.8       Zippy, the archive manager companion
composer/installers                   v1.4.0      v1.5.0      A multi-framework Composer library installer
consolidation/annotated-command       2.8.1       2.8.2       Initialize Symfony Console commands from annotated command class methods.
consolidation/output-formatters       3.1.12      3.1.13      Format text by applying transformations provided by plug-in formatters.
cweagans/composer-patches             1.6.2       1.6.4       Provides a way to patch Composer packages.
dflydev/dot-access-data               v1.1.0      v2.0.0      Given a deep data structure, access data by dot notation.
drupal/php                            1.0.0-beta1 1.0.0-beta2 Allows embedded PHP code/snippets to be evaluated. Enabling this can cause security and performance issues as it allows users to execute PHP code on your site.
egulias/email-validator               1.2.14      2.1.3       A library for validating emails
fabpot/goutte                         v3.2.1      v3.2.2      A simple PHP Web Scraper
gabordemooij/redbean                  v4.3.4      v5.0        RedBeanPHP ORM
jcalderonzumba/gastonjs               v1.0.3      v1.2.0      PhantomJS API based server for webpage automation
phpdocumentor/reflection-docblock     2.0.5       4.2.0      
phpspec/prophecy                      v1.7.2      1.7.3       Highly opinionated mocking framework for PHP 5.3+
phpunit/php-code-coverage             2.2.4       5.3.0       Library that provides collection, processing, and rendering functionality for PHP code coverage information.
phpunit/php-file-iterator             1.4.2       1.4.5       FilterIterator implementation that filters files based on a list of suffixes.
phpunit/php-token-stream              1.4.11      2.0.2       Wrapper around PHP's tokenizer extension.
phpunit/phpunit                       4.8.36      6.5.5       The PHP Unit Testing framework.
phpunit/phpunit-mock-objects          2.3.8       5.0.6       Mock Object library for PHPUnit
sebastian/comparator                  1.2.4       2.1.1       Provides the functionality to compare PHP values for equality
sebastian/diff                        1.4.3       2.0.1       Diff implementation
sebastian/environment                 1.3.8       3.1.0       Provides functionality to handle HHVM/PHP environments
sebastian/exporter                    1.2.2       3.1.0       Provides the functionality to export PHP variables for visualization
sebastian/global-state                1.1.1       2.0.0       Snapshotting of global state
sebastian/recursion-context           1.0.5       3.0.0       Provides functionality to recursively process PHP variables
sebastian/version                     1.0.6       2.0.1       Library that helps with managing the version number of Git-hosted PHP projects
symfony-cmf/routing                   1.4.1       2.0.3       Extends the Symfony2 routing component for dynamic routes and chaining several routers
symfony/browser-kit                   v3.3.10     v4.0.3      Symfony BrowserKit Component
symfony/class-loader                  v3.2.14     v3.4.3      Symfony ClassLoader Component
symfony/config                        v3.2.14     v4.0.3      Symfony Config Component
symfony/console                       v3.2.14     v4.0.3      Symfony Console Component
symfony/css-selector                  v3.3.10     v4.0.3      Symfony CssSelector Component
symfony/debug                         v3.4.3      v4.0.3      Symfony Debug Component
symfony/dependency-injection          v3.2.14     v4.0.3      Symfony DependencyInjection Component
symfony/dom-crawler                   v3.4.3      v4.0.3      Symfony DomCrawler Component
symfony/event-dispatcher              v3.2.14     v4.0.3      Symfony EventDispatcher Component
symfony/expression-language           v3.4.3      v4.0.3      Symfony ExpressionLanguage Component
symfony/filesystem                    v3.4.3      v4.0.3      Symfony Filesystem Component
symfony/Finder                        v3.4.3      v4.0.3      Symfony Finder Component
symfony/http-foundation               v3.2.14     v4.0.3      Symfony HttpFoundation Component
symfony/http-kernel                   v3.2.14     v4.0.3      Symfony HttpKernel Component
symfony/process                       v3.2.14     v4.0.3      Symfony Process Component
symfony/routing                       v3.2.14     v4.0.3      Symfony Routing Component
symfony/serializer                    v3.2.14     v4.0.3      Symfony Serializer Component
symfony/translation                   v3.2.14     v4.0.3      Symfony Translation Component
symfony/validator                     v3.2.14     v4.0.3      Symfony Validator Component
symfony/var-dumper                    v3.4.3      v4.0.3      Symfony mechanism for exploring and dumping PHP variables
symfony/yaml                          v3.2.14     v4.0.3      Symfony Yaml Component
twig/twig                             v1.35.0     v2.4.4      Twig, the flexible, fast, and secure template language for PHP
webflo/drupal-Finder                  1.0.0       1.1.0       Helper class to locate a Drupal installation from a given path.

Ceci est une installation assez Vanilla Drupal. Je n'ai que quelques modules ajoutés et un thème. Je devrais probablement également mentionner que ce site a été construit en utilisant le modèle drupal-composer mentionné dans les documents officiels ( https://github.com/drupal-composer/drupal-project ).

3
Cloudkiller

Honnêtement, pour une base de code comme votre site Drupal site typique, c'est un problème difficile à résoudre. Prenez, par exemple, mon Drupal VM Prod codebase, que je viens de mettre à jour de Drupal core 8.4.5 à 8.5.0 hier:

  • Ma contrainte de version drupal/core dans composer.json est ~8.4
  • Fonctionnement composer update drupal/core --with-dependencies n'a pas mis à jour Drupal core; il était bloqué à 8.4.5
  • Fonctionnement composer update (plus de l'option nucléaire - il mettra à jour tout, y compris les modules contrib et toutes autres dépendances, ce qui pourrait causer des problèmes et rendre plus difficile le test des mises à jour individuelles sur un site complexe!) a travaillé pour mettre à niveau Drupal core ... mais ce n'est pas idéal.

J'ai donc posé des questions à ce sujet dans le problème le compositeur n'a pas réussi à passer de 8.4.4 à 8.5.0-alpha1 , et j'ai même essayé de comprendre quelle dépendance bloquait mon Drupal = mise à niveau principale à l'aide de la commande Composer:

composer prohibits drupal/core:8.5.0

Cela a répertorié une tonne de composants symfony différents ... donc j'aurais pu m'asseoir et copier-coller chacun des 14 composants dans mon composer update commande, mais ce n'est pas amusant à faire, alors j'ai continué à fouiller (en vain).

Plus loin dans le fil de commentaires, @eiriksm a mentionné que depuis que mon projet a symfony/config (une dépendance de drush et drupal), je devais exécuter composer update drupal/core symfony/config --with-dependencies.

Je ne sais toujours pas comment j'aurais pu comprendre que je devais juste ajouter symfony/config dans la commande de mise à jour (par rapport à l'ajout de tous les autres composants symfony) ... mais si je le fais, je vais essayer de mettre à jour cette réponse avec ces informations afin que d'autres puissent en bénéficier à l'avenir!

4
geerlingguy

Mise à jour des versions mineures (8.3> 8.4, 8.4> 8.5) avec composer est un cauchemar.

J'arrive à la conclusion que peut-être composer update devrait être "adopté" et que l'on devrait gérer soigneusement les versions des modules dans composer.json peut-être les verrouiller tous dans les versions actuellement installées, puis changer la version uniquement lorsque vous souhaitez mettre à jour le module. Ce n'est vraiment pas un gros problème à faire.

C'est vraiment ainsi que nous l'avons fait avant le compositeur. Nous avons décidé quel module mettre à jour un par un, pas tous en même temps, avec drush up modulename ou peu importe.

Cela pourrait signifier que l'installation de modules avec des numéros de version spécifiques est une bonne idée:

composer require "drupal/address:1.0"

pas ça

composer require "drupal/address:~1.0"

Vous pouvez toujours changer "~1.0" à "1.0" plus tard dans composer.json, mais si vous installez un numéro de version spécifique, vous n'en aurez pas besoin.

2
Richard Hood