DEV Community

Cover image for How to enable Tailwind JIT compilation mode in your Angular project.
Adithya Sreyaj
Adithya Sreyaj

Posted on • Updated on • Originally published at blog.sreyaj.dev

How to enable Tailwind JIT compilation mode in your Angular project.

Tailwind, for those living under a rock, is all the buzz among web devs. It is a utility first CSS framework wherein we add a bunch of classes to HTML elements and the rest is taken care of by Tailwind.

<div class="w-full flex-none text-sm font-medium text-gray-500 mt-2">
   Test
 </div>
Enter fullscreen mode Exit fullscreen mode

This is how your template would look like. I mean not all are a fan of this approach, but for those who like this kind of utility-class approach, Tailwind is the best out there.

I personally have been using it extensively for all my projects, and I totally love it. You will be writing fewer custom styles, which is a relief.

Tailwind - Getting to know it

Writing custom styles was totally my thing until I started using Tailwind. I was not a fan of bootstrap and always made sure to write plain old CSS for most of the projects. You won't be able to find the real advantage of using utility-first frameworks like these at first or in smaller applications.
The real benefit comes when the application grows and the styles become very difficult to manage. Over time the styles bundle would grow drastically, especially if you are working in a team with a lot of other devs.

If you are using Tailwind, you would be shipping fewer styles as everything which is not used will be purged, meaning only those classes that you have used will be part of the bundle. This will shave a huge chunk from the styles bundle.

Angular and Tailwind

People really started liking Tailwind and using it with other frameworks was so easy. But in the case of Angular, it was a different story.
Tailwind is a PostCSS plugin, so to make it work, we need access to the PostCSS configuration where we can specify tailwind in the plugins list.
Even though Angular uses PostCSS, it didn't expose the bundler config file making it difficult to use Tailwind in Angular.

The only way is to eject the webpack config and then manually configure the bundler to utilize Tailwind. It is not something an average developer would do and is not recommended either.

Angular Tailwind Schematics

Ngneat came up with a super cool schematic for Angular ( NgNeat/Tailwind ), which would basically do everything and configure all the stuff needed to make Tailwind work with Angular. And it is so damn straightforward.

The schematics can be accessed via:

ng add @ngneat/tailwind
Enter fullscreen mode Exit fullscreen mode

Angular Official Support for Tailwind

Seeing the hype and the number of user requests, the Angular team was quick to release a version of Angular (v11.2) which comes with support for Tailwind. If the CLI detects a tailwind configuration in your project, PostCSS will automatically use the tailwind plugin with this config.

Before Tailwind came up with the JIT compiler, the compiling takes a lot of time. If you have a lot of variants configured in the tailwind config, the styles bundle spitted out in dev mode is too big that it lags the developer console while inspecting elements.
Purge was recommended to be enabled during production build, otherwise compiling would take even more time.

Here's what you have to do:

Prerequisite

Make sure the Angular CLI version is >= 11.2

Setting up Tailwind JIT

Tailwind JIT is release in v2.1 so make sure you are installing the latest version

  1. Install tailwind as a dependency
npm i tailwindcss
Enter fullscreen mode Exit fullscreen mode
  1. Create the tailwind config file
npx tailwindcss init
Enter fullscreen mode Exit fullscreen mode
  1. Add these base styles to styles.scss file:
@import "tailwindcss/base";
@import "tailwindcss/components";
@import "tailwindcss/utilities";
Enter fullscreen mode Exit fullscreen mode
  1. Edit the tailwind.config.js file to enable jit compilation.
  2. Update the purge array with the path to your components. If purge is not configured, JIT will not simple work.
module.exports = {
  mode: "jit",
  purge: ["./src/app/**/*.{ts,html}"],
  darkMode: false, // or 'media' or 'class'
  theme: {
    extend: {},
  },
  variants: {
    extend: {},
  },
  plugins: [],
};
Enter fullscreen mode Exit fullscreen mode

Running the project

For the Tailwind JIT compiler to detect changes to your files, you need to set the NODE_ENV to development. Read More Here: https://tailwindcss.com/docs/just-in-time-mode#watch-mode-and-one-off-builds

You can do that by simply setting the env variable before your serve and build scripts.
I am using cross-env so that we avoid the platform-related shenanigans when setting environment variables.

npm i -D cross-env
Enter fullscreen mode Exit fullscreen mode

Update the scripts in package.json:

"scripts": {
    "start": "cross-env NODE_ENV=development ng serve",
    "build": "cross-env NODE_ENV=production ng build",
  },
Enter fullscreen mode Exit fullscreen mode

We're done! Enjoy super-fast reload times when using Tailwind. No more laggy developer consoles, when inspecting elements on your browser.

Ref: https://tailwindcss.com/docs/just-in-time-mode

🌎 Connect with me

Buy me a pizza

Do add your thoughts in the comments section.
Stay Safe ❤️

Top comments (0)