On a current project, I’ve decided to use a component library as the first place to do front-end development.
I’m using Fractal as I can use Twig for templates. As Drupal also uses Twig templates, I have more reusabilty between the components in Fractal and Drupal compared to converting them from a different templating language like Handlebars or Nunjucks.
Rather than developing directly within the custom Drupal theme, I’ve been creating new components and pages initially within Fractal.
I have been able to create new components quickly and easily with the views uing Twig templates and inject data to it using a context file - a YAML file for each component that contains data that is injected automatically into the view.
This meant that I’ve been able to develop new components from scratch without needing to set up content types or paragraphs within Drupal, validate and confirm my data model, and present the templates to the client for review in Fractal. If a change is needed, it’s quick to do.
In most cases, I’ve been able to copy the Twig templates into Drupal and replace the static context data with dynamic data from Drupal without needing to make any further changes.
In a couple of situations, I’ve needed to change my implementation slightly when moving a template into Drupal, so in this workflow, I’ve made the changes in Fractal and re-exported them to keep things in sync between the two systems.
In situations where there is existing markup and/or styles from the Drupal side, I’ve copied those into Fractal so that they match before adding the additional styling and any markup changes.
In general, I like the approach as it gives me more flexibility upfront to make changes before needing to configure Drupal. I can see how things could get out of sync between the two systems, but hopefully having the assets compiled in Fractal and needing to copy them into Drupal will keep things synced up.
I don’t think that I’d use this approach for all projects, but for this one, where I’m working with multiple themes and will need to later add different variants of pages and components, it’s worked well so far.