Uppdatera paket med kompositör och veta vad jag ska uppdatera
On februari 10, 2021 by adminJag börjar precis arbeta med Drupal 8 och kompositören och jag försöker lista ut hur uppdateringen arbetsflödet ska fungera. Jag känner till grunderna från att administrera en Drupal 7-server i flera år, men Composer-delen löser ut mig.
Just nu kör jag från rotmappen för min Drupal-installation (med underhållsläge aktiverat) composer outdated
och jag får en lista över en massa paket som behöver en uppdatering.
Såvitt jag kan säga från dokumentationen borde jag bara uppdatera paketen som börjar med ”drupal /”. Förutsatt att bara konsolen och kärnan kommer upp som föråldrad, kör jag composer update drupal/console drupal/core --with-dependencies
och det drar ner uppdateringarna och gör sitt. När detta är klart, om jag kör composer outdated
igen, ser jag fortfarande en massa paket som är föråldrade enligt kompositören. Är det avsett? Eller ska dessa paket uppdateras?
Jag antar att Drupal är byggd med specifika versioner av paket, så att uppdatera alla skulle troligen bryta några saker, eller hur? Hur ska någon veta vilka paket som ska vara uppdaterad och vilka bör stanna vid en specifik version?
Det här får jag när jag kör 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.
Det här är en ganska vanilj-Drupal-installation. Jag har bara några moduler tillagda och ett tema. Jag borde nog också nämna att den här webbplatsen byggdes med drupal-kompositormallen som nämns i de officiella dokumenten ( https://github.com/drupal-composer/drupal-project ).
Kommentarer
Svar
Ärligt talat, för en kodbas som din typiska Drupal-webbplats är detta en svårt problem att lösa. Ta till exempel min Drupal VM Prod kodbas, som jag just uppgraderade från Drupal-kärna 8.4.5 till 8.5.0 igår:
- Min begränsning av drupal / core-version i composer.json är
~8.4
- Kör
composer update drupal/core --with-dependencies
uppdaterade inte Drupal kärna; den satt fast vid 8.4.5 - Kör
composer update
(mer av kärnkraftsalternativet – det kommer att uppdatera allt, inklusive bidragsmoduler och andra beroenden, vilket kan orsaka problem och göra det svårare att testa enskilda uppdateringar på en komplex webbplats!) arbetade för att uppgradera Drupal-kärnan … men det är inte perfekt.
Så jag frågade om det i utgåvan kompositören misslyckades med att uppgradera från 8.4.4 till 8.5.0-alpha1 och försökte till och med ta reda på vilket beroende som blockerade min Drupal-kärnuppgradering med hjälp av Komponistkommando:
composer prohibits drupal/core:8.5.0
Detta listade upp massor av olika symfonikomponenter … så jag kunde ”ha satt där och co klistra in var och en av de 14 komponenterna i mitt composer update
-kommando, men det är inte kul att göra, så jag fortsatte att peka runt (till ingen nytta).
Senare i kommentarstråden nämnde @eiriksm att eftersom mitt projekt har symfony/config
(ett beroende av borste- och drupalkonsol), behövde jag köra composer update drupal/core symfony/config --with-dependencies
.
Jag har fortfarande ingen aning om hur jag kunde ”tappat att jag bara behövde lägga till symfony/config
i uppdateringskommandot (mot att lägga till alla andra symfonyer komponenter) … men om jag gör det försöker jag uppdatera det här svaret med den informationen så att andra kan dra nytta av dem i framtiden!
Kommentarer
- Jag skrev också ett blogginlägg om detta ämne, med lite mer info: Uppdatering av drupal / core med Composer – men Drupal core gör inte ’ t uppdatering
Svar
Uppdatering av mindre versioner (8.3> 8.4, 8.4> 8.5) med kompositör är en mardröm.
Jag kommer till slutsatsen att kanske composer update
bör ”omfamnas” och att man ska hantera modulversioner noggrant i composer.json
kanske låser dem alla till de nu installerade versionerna och ändrar sedan versionen bara när du vill uppdatera modulen. Det är verkligen inte så stort att göra.
Det var verkligen så vi gjorde det före kompositören. Vi bestämde oss för vilken modul vi skulle uppdatera en efter en, inte alla samtidigt, med drush up modulename
eller vad som helst.
Det kan betyda att det är en bra idé att installera moduler med specifika versionsnummer:
composer require "drupal/address:1.0"
inte detta
composer require "drupal/address:~1.0"
Du kan alltid ändra "~1.0"
till "1.0"
senare i composer.json
, men om du installerar ett specifikt versionsnummer behöver du inte.
Kommentarer
- Uppdatering av mindre versioner (8.3 > 8.4, 8.4 > 8.5) med kompositör är en mardröm. Jag ’ har gjort ungefär 10 8.4 – > 8.5 uppdateringar under den senaste veckan, allt genom kompositör, allt så enkelt som att köra
composer update
, inga problem med någon av dem. Jag ’ jag är inte säker på vilken kombination av saker som får människor att kämpa med detta, jag har inte ’ t träffa ett enda problem med Drupal / Composer ännu - @Clive om du bara vill uppdatera Drupal Core, en d inte alla kärnor, bidrag och alla andra beroenden, och du ’ låser inte in en specifik version för alla andra saker förutom Core …
composer update
kan få mycket oavsiktliga konsekvenser. För många webbplatser är det vanligtvis säkert att uppdatera allt hela tiden, men för vissa kan det vara en katastrof. Testa alltid innan du går i produktion!
composer show --tree
visar beroendeträdet, bläddring som kan hjälpa dig att avgöra vad som kräver paketen som behöver uppdateras och informera ett beslut. Du kan också hitta github.com/webflo/drupal-core-strict användbart, det fixar kärnberoenden till kända bra versioner som kan hjälpa dig att uppdatera med mer självförtroendecomposer update
-kommandot och förlita mig på composer.json-filen för att hålla paketen kompatibla (vid minst med kärnan)? Och om saker går sönder under en uppdatering går jag bara igenom varje paketuppdatering och får reda på vad ’ som orsakar problemet. Verkar vettigt.