Atualizando pacotes com o composer e sabendo o que atualizar
On Fevereiro 10, 2021 by adminEstou começando a trabalhar com o Drupal 8 e o composer e estou tentando descobrir como a atualização o fluxo de trabalho deve funcionar. Eu sei o básico por administrar um servidor Drupal 7 por anos, mas a parte do Composer está me atrapalhando.
Agora eu executo, da pasta raiz da minha instalação do Drupal, (com o modo de manutenção ativado) composer outdated
e recebo uma lista de vários pacotes que precisam de uma atualização.
Pelo que posso dizer pela documentação, devo atualizar apenas os pacotes que começam com “drupal /”. Supondo que apenas o console e o núcleo estejam desatualizados, executo composer update drupal/console drupal/core --with-dependencies
e isso puxa as atualizações e faz seu trabalho. Depois de fazer isso, se eu executar composer outdated
novamente, ainda vejo um monte de pacotes que estão desatualizados de acordo com o compositor. Isso é intencional? Ou esses pacotes devem ser atualizados?
Estou supondo que o Drupal é construído usando versões específicas de pacotes, então atualizar todos eles provavelmente quebraria algumas coisas, certo? Como alguém pode saber quais pacotes devem ser atualizado e quais devem permanecer em uma versão específica?
Isso é o que eu obtenho quando executo 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.
Esta é uma instalação bastante simples do Drupal. Tenho apenas alguns módulos adicionados e um tema. Provavelmente também devo mencionar que este site foi construído usando o modelo drupal-composer mencionado na documentação oficial ( https://github.com/drupal-composer/drupal-project ).
Comentários
Resposta
Honestamente, para uma base de código como seu site Drupal típico, este é um problema difícil de resolver. Pegue, por exemplo, minha base de código Drupal VM Prod , que acabei de atualizar do núcleo Drupal 8.4.5 para 8.5.0 ontem:
- Minha restrição de versão drupal / core em composer.json é
~8.4
- Executando
composer update drupal/core --with-dependencies
não atualizou Núcleo do Drupal; ele estava preso em 8.4.5 - Executando
composer update
(mais opções nucleares – ele atualizará tudo, incluindo módulos contrib e quaisquer outras dependências, o que pode causar problemas e dificultar o teste de atualizações individuais em um site complexo!) trabalhou para atualizar o núcleo do Drupal … mas isso não é o ideal.
Então perguntei sobre isso no problema composer falhou ao atualizar de 8.4.4 para 8.5.0-alpha1 , e até tentou descobrir qual dependência estava bloqueando minha atualização de núcleo Drupal usando o Comando do Composer:
composer prohibits drupal/core:8.5.0
Isso listou uma tonelada de diferentes componentes do symfony … então eu poderia “ter sentado lá e co py-colou cada um dos 14 componentes em meu comando composer update
, mas isso não é divertido de fazer, então continuei fuçando (sem sucesso).
Posteriormente no tópico de comentários, @eiriksm mencionou que, como meu projeto tem symfony/config
(uma dependência do drush e do console drupal), eu precisava executar o composer update drupal/core symfony/config --with-dependencies
.
Ainda não tenho ideia de como pude “descobrir que só precisava adicionar symfony/config
no comando de atualização (em vez de adicionar todos os outros symfony componentes) … mas se eu fizer isso, tentarei atualizar esta resposta com essas informações para que outros possam se beneficiar no futuro!
Comentários
- Eu também escrevi uma postagem no blog sobre este tópico, com um pouco mais de informação: Atualizando drupal / core com Composer – mas o Drupal core não ‘ t update
Resposta
Atualizando versões secundárias (8.3> 8.4, 8.4> 85) com o compositor é um pesadelo.
Estou chegando à conclusão de que talvez composer update
deva ser “adotado” e que se deve gerenciar as versões dos módulos cuidadosamente em composer.json
talvez bloqueando todos para as versões atualmente instaladas, então mudando a versão apenas quando você quiser atualizar o módulo. Isso realmente não é grande coisa a fazer.
Isso é realmente como fazíamos antes do compositor. Decidimos qual módulo atualizar um por um, não todos de uma vez, com drush up modulename
ou qualquer outro.
Isso pode significar que instalar módulos com números de versão específicos é uma boa ideia:
composer require "drupal/address:1.0"
não este
composer require "drupal/address:~1.0"
Você sempre pode alterar "~1.0"
para "1.0"
posteriormente em composer.json
, mas se você instalar um número de versão específico, não será necessário.
Comentários
- Atualizando versões secundárias (8.3 > 8.4, 8.4 > 8.5) com o compositor é um pesadelo. I ‘ fizemos cerca de 10 8.4 – > 8.5 atualizações na semana passada, por meio do compositor, tão simples quanto executar
composer update
, sem problemas com nenhum deles. Eu ‘ não tenho certeza de que combinação de coisas está fazendo as pessoas lutarem com isso, não ‘ t encontrou um único problema com o Drupal / Composer ainda - @Clive se você apenas quiser atualizar o Drupal Core, um d nem todas as dependências do core, contrib e todas as outras dependências, e você ‘ não está bloqueando uma versão específica para todas as outras coisas além do Core …
composer update
pode ter muitas consequências não intencionais. Para muitos sites, geralmente é seguro atualizar tudo o tempo todo, mas para alguns pode ser um desastre. Sempre teste antes de ir para a produção!
composer show --tree
exibirá a árvore de dependências, uma navegação que pode ajudá-lo a determinar o que requer os pacotes que precisam ser atualizados e informar uma decisão. Você também pode encontrar github.com/webflo/drupal-core-strict útil, ele corrige dependências básicas para versões boas conhecidas que podem ajudá-lo a atualizar com mais confiançacomposer update
genérico e contar com o arquivo composer.json para manter os pacotes compatíveis (em pelo menos com o núcleo)? E então, se alguma coisa quebrar no dev durante uma atualização, eu simplesmente examino cada atualização de pacote e descubro o que ‘ está causando o problema. Parece fazer sentido.