Drupal
Comment supprimer manuellement un module Drupal 8
Fiche écrite en 2017 et relue en 2026 : l’encadré en fin de fiche signale ce qui a changé depuis.
Il arrive qu’un module refuse de se désinstaller, aussi bien depuis le gestionnaire d’extensions qu’avec drush : dépendance cassée, fichiers supprimés trop tôt, erreur à l’exécution de son hook_uninstall. Il faut alors le retirer à la main de la liste des modules actifs.
Cette liste est stockée, sérialisée, dans l’enregistrement core.extension des tables config et cache_config. On récupère la valeur du champ data, on en retire le module, puis on réécrit la valeur obtenue dans les deux tables. Exemple avec le module filebrowser :
<?php
$data = unserialize('a:5:{s:6:"module";a:126:{s:6:"action";i:0;s:8:"addtoany";i:0;s:13:"admin_toolbar";i:0;s:19:"admin_toolbar_tools";i:0;s:23:"advanced_text_formatter";i:0;s:16:"auto_entitylabel";i:0;s:14:"automated_cron";i:0;s:22:"better_exposed_filters";i:0;s:5:"blazy";i:0;s:5:"block";i:0;s:11:"block_class";i:0;s:13:"block_content";i:0;s:11:"block_place";i:0;s:17:"bootstrap_library";i:0;s:10:"breakpoint";i:0;s:8:"ckeditor";i:0;s:20:"ckeditor_fontawesome";i:0;s:16:"ckeditor_widgets";i:0;s:5:"color";i:0;s:8:"slick_ui";i:0;s:11:"slick_views";i:0;s:6:"system";i:0;s:8:"taxonomy";i:0;s:9:"telephone";i:0;s:4:"text";i:0;s:5:"token";i:0;s:7:"toolbar";i:0;s:4:"tour";i:0;s:6:"update";i:0;s:4:"user";i:0;s:17:"video_embed_field";i:0;s:17:"video_embed_media";i:0;s:8:"views_ui";i:0;s:7:"webform";i:0;s:17:"webform_templates";i:0;s:10:"webform_ui";i:0;s:11:"webprofiler";i:0;s:10:"xmlsitemap";i:0;s:17:"xmlsitemap_custom";i:0;s:18:"xmlsitemap_engines";i:0;s:2:"ds";i:1;s:17:"menu_link_content";i:1;s:8:"pathauto";i:1;s:5:"views";i:10;s:8:"standard";i:1000;}s:5:"theme";a:5:{s:6:"stable";i:0;s:6:"classy";i:0;s:5:"seven";i:0;s:3:"blah";i:0;s:7:"blahblah";i:0;}s:7:"profile";s:8:"standard";s:5:"_core";a:1:{s:19:"default_config_hash";s:43:"BLAH-blahblahblahblah";}s:8:"langcode";s:2:"fr";}');
unset($data['module']['filebrowser']);
echo (serialize($data));
Le dossier du module peut ensuite être supprimé (par exemple rm -rf modules/filebrowser), puis le cache vidé avec drush cr.
Certains modules laissent aussi derrière eux des types de contenu impossibles à supprimer depuis l’administration ou avec drush. Dans ce cas, ce code, à adapter :
<?php
use Drupal\node\Entity\NodeType;
$node_type = NodeType::load('dir_listing');
$node_type->delete();