Today I’ve been playing around with BridgetownRB as a static site generator. I’ve also recently been playing around with the new version of Tailwind CSS and I wanted to update this site design to use it. Here’s a quick tutorial on setting it up with BridgetownRB.

1. Install Tailwind with Yarn

yarn add -D postcss autoprefixer postcss-import postcss-loader tailwindcss

2. Create Tailwind config file

Run npx tailwindcss init to create tailwind.config.js file.

3. Create a postcss.config.js file

module.exports = {
  plugins: [
    require("postcss-import", {
      path: "frontend/styles",
      plugins: [],
    }),
    require("tailwindcss"),
    require("autoprefixer"),
  ],
};

4. Update your webpack.config.js file

Scroll down to where you see MiniCssExtractPlugin.loader (around line 60) and change this:

{
  test: /\.(s[ac]|c)ss$/,
  use: [
    MiniCssExtractPlugin.loader,
    "css-loader",
    {
      loader: "sass-loader",
      options: {
        sassOptions: {
          includePaths: [
            path.resolve(__dirname, "src/_components")
          ],
        },
      },
    },
  ],
},

to this

{
  test: /\.(s[ac]|c)ss$/,
  use: [
    MiniCssExtractPlugin.loader,
    "css-loader",
    {
      loader: "sass-loader",
      options: {
        sassOptions: {
          includePaths: [
            path.resolve(__dirname, "src/_components")
          ],
        },
      },
    },
    {
      loader: "postcss-loader",
      options: {
        postcssOptions: {
          ident: "postcss",
          plugins: [
            require("postcss-import"),
            require("tailwindcss"),
            require("autoprefixer"),
          ],
        }
      },
    },
  ],
},

5. Add Tailwind to your CSS

Add the following to frontend/styles/index.scss.

@import "tailwindcss/base";
@import "tailwindcss/components";
@import "tailwindcss/utilities";

6. Remove unused CSS

The great thing about Tailwind is that it uses PostCSS to remove any unused CSS which reduces the size of the final CSS file. Edit your tailwind.config.js file so it looks like this:

module.exports = {
  purge: {
    enabled: process.env.NODE_ENV == "production",
    content: ['./src/**/*.{html,md,liquid}']
  },
  theme: {
    extend: {},
  },
  variants: {},
  plugins: [],
}

Now when you build/deploy your site, you’ll need to use the NODE_ENV environment variable. For example:

NODE_ENV=production yarn deploy

Success! You should now have a working BridgetownRB site with Tailwind v2!