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 ).
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:
~8.4
composer update drupal/core --with-dependencies
n'a pas mis à jour Drupal core; il était bloqué à 8.4.5composer 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!
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.