Mettre à jour des packages avec composer et savoir quoi mettre à jour
On février 10, 2021 by adminJe commence tout juste à travailler avec Drupal 8 et composer et jessaie de comprendre comment la mise à jour le flux de travail devrait fonctionner. Je connais les bases de ladministration dun serveur Drupal 7 pendant des années, mais la partie Composer me trébuche.
En ce moment, je lance, à partir du dossier racine de mon installation Drupal, (avec le mode de maintenance activé) composer outdated
et jobtiens une liste dun tas de paquets nécessitant une mise à jour.
Pour autant que je sache daprès la documentation, je ne devrais mettre à jour que les paquets commençant par « drupal / ». En supposant que seuls la console et le noyau semblent obsolètes, jexécute composer update drupal/console drupal/core --with-dependencies
et cela extrait les mises à jour et fait son truc. Une fois que cela est fait, si je lance à nouveau composer outdated
, je vois toujours un tas de paquets qui sont obsolètes selon le compositeur. Est-ce que cest prévu? Ou est-ce que ces paquets devraient être mis à jour?
Je suppose que Drupal est construit en utilisant des versions spécifiques de paquets, donc les mettre à jour tous casserait probablement certaines choses, nest-ce pas? Comment quelquun est-il censé savoir quels paquets devraient être mis à jour et lesquels doivent rester dans une version spécifique?
Cest ce que jobtiens lorsque jexécute 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.
Il sagit dune installation Drupal assez vanille. Je nai que quelques modules ajoutés et un thème. Je devrais probablement aussi mentionner que ce site a été construit en utilisant le modèle drupal-composer mentionné dans la documentation officielle ( https://github.com/drupal-composer/drupal-project ).
Commentaires
Réponse
Honnêtement, pour une base de code comme votre site Drupal typique, cest un problème difficile à résoudre. Prenons, par exemple, ma base de code Drupal VM Prod , que je viens de mettre à niveau hier de Drupal Core 8.4.5 à 8.5.0:
- Ma contrainte de version drupal / core dans composer.json est
~8.4
- Running
composer update drupal/core --with-dependencies
didn « t update Drupal core; il était bloqué à 8.4.5 - Exécution de
composer update
(plus de loption nucléaire – il mettra à jour tout, y compris les modules contrib et toutes les autres dépendances, qui pourrait causer des problèmes et rendre beaucoup plus difficile le test de mises à jour individuelles sur un site complexe!) a travaillé pour mettre à niveau le noyau de Drupal … mais ce nest pas idéal.
Jai donc posé une question à ce sujet dans le problème , le compositeur na pas réussi à mettre à niveau de 8.4.4 à 8.5.0-alpha1 , et a même essayé de déterminer quelle dépendance bloquait ma mise à niveau du noyau Drupal en utilisant le Commande du compositeur:
composer prohibits drupal/core:8.5.0
Ceci a répertorié une tonne de composants symfony différents … donc je pourrais « rester assis là et co py-collé chacun des 14 composants dans ma commande composer update
, mais ce nest pas amusant à faire, alors jai continué à fouiller (en vain).
Plus tard dans le fil de discussion, @eiriksm a mentionné que puisque mon projet a symfony/config
(une dépendance de drush et de la console drupal), je devais exécuter composer update drupal/core symfony/config --with-dependencies
.
Je nai toujours aucune idée de la façon dont je pourrais « avoir compris que javais juste besoin dajouter symfony/config
dans la commande de mise à jour (par rapport à lajout de tous les autres symfony composants) … mais si je le fais, jessaierai de mettre à jour cette réponse avec ces informations afin que dautres puissent en bénéficier à lavenir!
Commentaires
- Jai également écrit un article de blog sur ce sujet, avec un peu plus dinformations: Mise à jour de drupal / core avec Composer – mais Drupal core ne ‘ t update
Réponse
Mise à jour des versions mineures (8.3> 8.4, 8.4> 8.5) avec le compositeur est un cauchemar.
Jarrive à la conclusion que peut-être composer update
devrait être « embrassé » et que lon devrait gérer soigneusement les versions de module dans composer.json
peut-être les verrouiller tous aux versions actuellement installées, puis changer la version uniquement lorsque vous souhaitez mettre à jour le module. Ce nest vraiment pas si grave à faire.
Cest vraiment comme ça que nous lavons fait avant le compositeur. Nous avons décidé quel module mettre à jour un par un, pas tous à la fois, avec drush up modulename
ou autre.
Cela pourrait signifier que linstallation 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 remplacer "~1.0"
par "1.0"
plus tard dans composer.json
, mais si vous installez un numéro de version spécifique, vous n’avez pas besoin de le faire.
Commentaires
- Mise à jour des versions mineures (8.3 > 8.4, 8.4 > 8.5) avec le compositeur est un cauchemar. I ‘ ai fait environ 10 8.4 – > 8.5 mises à jour la semaine dernière, tout au long de composer, tout aussi simple que dexécuter
composer update
, aucun problème avec aucun dentre eux. Je ‘ ne sais pas quelle combinaison de choses fait que les gens ont du mal avec cela, je nai pas ‘ t rencontré un seul problème avec Drupal / Composer pour le moment - @Clive si vous juste souhaitez mettre à jour Drupal Core, un d pas toutes les dépendances core, contrib et toutes les autres dépendances, et vous ‘ ne vous verrouillez pas dans une version spécifique pour tout autre chose que Core …
composer update
peut avoir de très nombreuses conséquences imprévues. Pour de nombreux sites, il est généralement assez sûr de tout mettre à jour tout le temps, mais pour certains, cela peut être un désastre. Testez toujours avant de passer à la production!
composer show --tree
affichera larborescence des dépendances, une navigation qui pourrait vous aider à déterminer ce qui nécessite les packages qui doivent être mis à jour et informer une décision. Vous pouvez également trouver github.com/webflo/drupal-core-strict utile, il corrige les dépendances principales aux bonnes versions connues qui pourraient vous aider à mettre à jour avec plus de confiancecomposer update
et me fier au fichier composer.json pour garder les packages compatibles (à moins avec le noyau)? Et puis si des choses se cassent sur le développement pendant une mise à jour, je passe simplement en revue chaque mise à jour de paquet et je découvre ce qui est ‘ qui cause le problème. Cela semble logique.