generator-mc-d9-theme
v2.7.1
Published
Yeoman generator for creating Drupal 9 component based themes.
Downloads
98
Readme
Mediacurrent Theme Generator
The Theme Generator is a scafolding tool built by your friends at Mediacurrent, which lets you quickly set up a Drupal 8 or 9 theme with sensible defaults and best practices.
- What's New - Read the Changelog
- Using the Theme Generator
- Creating a new Drupal Theme
- Note about Drupal 9
- About the New Theme
- Links
- Contributing
Using the Theme Generator
While the theme generator can be run anywhere, it's happiest when it's run from an empty directory you'd like to become your theme.
While not a requirement we like to use NVM to manage the version of Node per project.
Creating a new Drupal theme
Create a new directory. Example:
themes/custom/my_awesome_theme
Setup NodeJS & NPM
Move into the new directory and install Node:
cd my_awesome_themenvm install 14 && node -v > .nvmrcThis will install the latest release of NodeJS
v14.It will create
.nvmrcin the root of your project.
Theme Generator is compatible with npm v6.
npm install -g [email protected]From now on, when working on this theme change into its directory and run
nvm useand NVM will switch to the specified version for you.
Create the theme
Run the generator (Do not change this command):
npm create yo mc-d9-theme- You should be taken through a series of questions that allow you to pick the best options for your theme.
IMPORTANT: Your theme's machine name should always match the directory name you created above.
More info if you're interested in how this stuff works:
npm create is an alias of npm init and uses npx under the hood. Find out more about npm init.
Note about Drupal 9
If you are building a Drupal 9 theme, make the following updates after your theme has been created:
Update Pattern Lab to v5.14.0 by updating
package.jsonas follows:"@pattern-lab/core": "5.14.0", "@pattern-lab/engine-twig-php": "5.14.0", "@pattern-lab/uikit-workshop": "5.14.0",Remove
node_modulesRun
npm install
About the New Theme
Drupal Module Dependencies
This theme uses Twig namespaces. In order for these to work in Drupal you must install the Components Library module.
Support
The following is supported by your new theme.
- Pattern Lab (Node)
- Component-Based Workflow
- ES6+ (With Source Maps)
- Sass
- Image Compression
- Live reloading
- Sass and JavaScript linting
Starter Kit
The theme generator allows you to (optionally) add example components / templates.
- Element - Body Text
- Element - Button
- Element - Eyebrow
- Element - Heading
- Layout - L-Flex
- Layout - Page Layout (dependencies: Breadcrumb, L-Flex, Main Menu, Site Branding, Site Footer, Utility Nav)
- Layout - Site Branding
- Layout - Site Footer (dependencies: Body Text, Menu, Site Branding, Social Menu, Utility Nav)
- Layout - Site Header (dependencies: Breadcrumb, L-Flex, Main Menu, Site Branding, Utility Nav)
- Layout - Social Menu (dependencies: Icons)
- Layout - Utility Nav / Account (dependencies: Menu)
- Drupal - Breadcrumb
- Drupal - Font Awesome
- Drupal - Menu
- Drupal - Main Menu
- Drupal - Messages
- Drupal - Page Title (dependencies: Heading)
- Drupal - Pager (dependencies: Icons)
- Drupal - Search API Results
- Drupal - Search Box (dependencies: Icons)
- Drupal - Tabs
- Node - Rain Templates
- Block - Accordion (dependencies: Heading, Icons)
- Block - Breaker (dependencies: Card)
- Block - Card (dependencies: Body Text, Heading)
- Block - Card List (dependencies: Button, Card)
- Block - Carousel / Slider (dependencies: Heading, Hero)
- Block - Embed (dependencies: Heading)
- Block - Gallery Carousel (dependencies: Body Text, Heading)
- Block - Gallery + Lightbox (dependencies: Body Text, Heading, Icons)
- Block - Hero (dependencies: Body Text, Button, Eyebrow, Heading, Media)
- Block - Latest News (dependencies: Card, Heading)
- Block - Map (dependencies: Eyebrow)
- Block - Media (dependencies: Heading, Media)
- Block - Quote
- Block - Teaser (dependencies: Card)
- Block - Views (dependencies: Button, Heading)
These can include both component and Drupal templates that are added to the appropriate place during theme generation. Your theme.libraries.yml is also updated to include the relevant libraries.
This can also be run within a pre-existing theme using:
npx yo mc-d9-theme:starter-kitCreate new Components
You can also generate base components with the right files in place using:
npm run generateThis is helpful if you are building out a new theme and would like to quickly create lots of new components with the libraries already wired up.
A Word About Commiting ./dist Files
TLDR: Don't do it if you can avoid it.
Every time Pattern Lab is rebuilt the cache busting strings will change on CSS and JS files. dependencyGraph.json will also be updated every single time which makes reviewing pull requests rather difficult.
Optimally we want to gitignore all /.dist files and run npm run build as part of a continuous integration process.
Stuff You Might Want To Change
Supported Browsers
Change what browsers your theme supports by updating browserslist within package.json. For options take a look at browserslist.
This impacts CSS browser prefixes and JavaScript compiled files.
Demo Files
- Swap out
screenshot.pngwith your own theme image. - Remove or replace the font files in
./src/patterns/global/fonts/. - Change the colors in
./src/patterns/global/colors/.
Go Team
Provided by default are seven npm scripts that point to Gulp tasks. We run gulp through npm scripts.
Run the default build task (gulp in this instance) and everything in it. This is the equivalent to running
gulpon the command line with Gulp installed globally.npm run buildCompile Sass and JS.
npm run compileWatch files and run tasks when they change.
npm run watchCompress png and svg assets.
npm run compressBuild Pattern Lab.
npm run styleguideLint Sass and JS files.
npm run lintDelete compiled Sass, JS and style guide files from the /dist directory.
npm run clean
Links
Contributing
Would you like to contribute? Want to make a few changes or fix a bug? COME ON OVER!
Clone down this repo
git clone [email protected]:mediacurrent/theme_generator_9.gitcd theme_generator_9Remove generator-mc-d9-theme if you have previously installed it:
Tip: use npm ls -g -depth=0 to see what global node modules are installed.
npm uninstall generator-mc-d9-theme -gUse the node version of the generator
nvm install
nvm useInstall the generator's dependencies
npm installLink your local generator files to npm:
npm linkNow whenever you run yo mc-d9-theme it'll use your locally cloned mc-d9-theme generator. Any updates done to the generator can be tested in real time.
Break off a feature branch dive right in. After you've got something you'd like to add, push back to the repo and pull request against develop.
IMPORTANT
To test the changes you've made locally, ensure your new theme uses the same version of node as the generator.
