{"componentChunkName":"component---src-templates-post-jsx","path":"/fr/drupal-canvas-sdc-export-config","result":{"data":{"markdownRemark":{"html":"<p>Récemment, quelqu'un de mon équipe a fait une modification en apparence anodine sur un Single Directory Component (SDC) utilisé par Drupal Canvas : un simple changement d'<code class=\"language-text\">enum</code> dans le schéma des props du composant, puis un déploiement sur l'environnement de dev.</p>\n<p>Le déploiement a échoué pendant :</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">drush cim</code></pre></div>\n<p>avec :</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">component entity is a versioned config entity, and its loaded version is not the active version</code></pre></div>\n<h2>🔍 Que s'est-il passé ?</h2>\n<p>Drupal Canvas ne s'appuie pas directement sur le fichier <code class=\"language-text\">*.component.yml</code> au runtime.</p>\n<p>Pour chaque SDC utilisé par Canvas, il maintient une config entity <code class=\"language-text\">Component</code>, par exemple :</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">canvas.component.sdc.&lt;theme&gt;.&lt;component&gt;</code></pre></div>\n<p>Cette entité conserve :</p>\n<ul>\n<li>une <code class=\"language-text\">active_version</code>, basée sur un hash du schéma des props du composant ;</li>\n<li>un historique des versions précédentes, pour que les instances de composants Canvas existantes continuent de fonctionner.</li>\n</ul>\n<p>Donc quand vous modifiez le schéma d'un composant — même quelque chose d'aussi simple qu'un <code class=\"language-text\">enum</code> — la version du composant change.</p>\n<p>Après un cache rebuild, Canvas calcule la nouvelle version et l'enregistre en base de données.</p>\n<p>Vous pouvez alors vous retrouver avec :</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">*.component.yml  →  nouveau schéma / nouveau hash\nconfig sync      →  ancienne version\nbase de données  →  nouvelle version active</code></pre></div>\n<p>💥 Et le <code class=\"language-text\">drush cim</code> suivant peut échouer, parce que la configuration et la version active du composant Canvas ne correspondent plus.</p>\n<h2>✅ La règle que j'applique désormais</h2>\n<p>Dès que je modifie le schéma d'un SDC utilisé par Canvas — props, slots, enums, valeurs par défaut, etc. :</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">drush cr\ndrush cex</code></pre></div>\n<p>Puis je commite les deux côtés du changement ensemble :</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">*.component.yml\ncanvas.component.sdc.*.yml</code></pre></div>\n<p>Le schéma du composant et sa configuration Canvas sont en réalité les deux moitiés d'un même changement.</p>\n<p>Cela évite aussi que la version Canvas générée dépende de l'environnement qui a lancé le dernier cache rebuild.</p>\n<p>Petit détail, mais important dès qu'on fait circuler des changements Drupal Canvas + SDC entre environnements.</p>","excerpt":"Récemment, quelqu'un de mon équipe a fait une modification en apparence anodine sur un Single Directory Component (SDC) utilisé par Drupal Canvas : un simple…","frontmatter":{"date":"2026-09-24","metaDate":"2026-09-24","title":"Drupal Canvas : vous avez modifié les props d'un composant ? Exportez votre config","tags":["Drupal","Drupal Canvas","SDC","Configuration","Drush","DevOps"],"path":"/drupal-canvas-sdc-export-config","cover":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAIBBf/EABYBAQEBAAAAAAAAAAAAAAAAAAADBP/aAAwDAQACEAMQAAAB5dw2zwH/xAAXEAADAQAAAAAAAAAAAAAAAAAAAREg/9oACAEBAAEFAkTP/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAFBABAAAAAAAAAAAAAAAAAAAAIP/aAAgBAQAGPwJf/8QAFxAAAwEAAAAAAAAAAAAAAAAAAAERIP/aAAgBAQABPyFKNJn/2gAMAwEAAgADAAAAEJPf/8QAFhEAAwAAAAAAAAAAAAAAAAAAARAx/9oACAEDAQE/EDV//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAGBABAAMBAAAAAAAAAAAAAAAAARARQQD/2gAIAQEAAT8QNNtV2hKrsf/Z","aspectRatio":1.7777777777777777,"src":"/static/e9b668058154a4d1533f6174475064af/88110/cover.jpg","srcSet":"/static/e9b668058154a4d1533f6174475064af/0b320/cover.jpg 480w,\n/static/e9b668058154a4d1533f6174475064af/60b32/cover.jpg 960w,\n/static/e9b668058154a4d1533f6174475064af/88110/cover.jpg 1920w,\n/static/e9b668058154a4d1533f6174475064af/c33c1/cover.jpg 2560w","srcWebp":"/static/e9b668058154a4d1533f6174475064af/d1a9d/cover.webp","srcSetWebp":"/static/e9b668058154a4d1533f6174475064af/bc3bf/cover.webp 480w,\n/static/e9b668058154a4d1533f6174475064af/39337/cover.webp 960w,\n/static/e9b668058154a4d1533f6174475064af/d1a9d/cover.webp 1920w,\n/static/e9b668058154a4d1533f6174475064af/ca60f/cover.webp 2560w","sizes":"(max-width: 1920px) 100vw, 1920px"},"resize":{"src":"/static/e9b668058154a4d1533f6174475064af/c4f3a/cover.jpg"}}}}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"pathSlug":"/drupal-canvas-sdc-export-config","locale":"fr","prev":{"fields":{"locale":"fr"},"frontmatter":{"path":"/drupal-12-alpha1-release","title":"Drupal 12.0.0-alpha1 : le compte à rebours est lancé","tags":["Drupal","Drupal 12","Drupal 11","Drupal 10","PHP","Symfony","Update","News"]}},"next":null}}}