CSS Syntax Equivalent for module.exports in TailwindCSS 4+
Mastering CSS Syntax for module.exports in TailwindCSS 4+

Arrey bhai, welcome to this detailed blog post where we’re diving deep into the world of TailwindCSS 4+ and how to handle the equivalent of module.exports
using CSS syntax. If you’re a developer in India or anywhere else, and you’re scratching your head thinking, “Bhai, yeh module.exports ka kya alternative hai TailwindCSS mein?”, then you’re in the right place! This post is going to be a proper guide, over 5000 words, so grab a chai, sit back, and let’s get started!
TailwindCSS has become the go-to CSS framework for modern web developers, and with version 4+, it’s more powerful than ever. But one question that keeps popping up in forums, WhatsApp groups, and even chai stalls is: how do we handle configuration exports like module.exports
in TailwindCSS? In this post, we’ll break it down step-by-step, in proper Indian style, with examples, code snippets, and all the masala you need to master this topic.
What is module.exports in the JavaScript World?
Before we jump into TailwindCSS, let’s first understand module.exports
. Arrey, yeh kya cheez hai? In Node.js, module.exports
is like the delivery boy who brings your code from one file to another. It’s a way to export functions, objects, or values from a JavaScript module so that other files can use them. For example, if you’re building a Node.js app, you might write something like this:
// utils.js const greet = () => console.log("Namaste, bhai!"); module.exports = { greet };
Then, in another file, you can import it like this:
// app.js const { greet } = require("./utils"); greet(); // Outputs: Namaste, bhai!
Simple, na? But here’s the catch: TailwindCSS is primarily a CSS framework, and CSS doesn’t have a direct equivalent to module.exports
. So, how do we achieve similar functionality in TailwindCSS 4+? Let’s find out!
TailwindCSS 4+: The New Kid on the Block
TailwindCSS 4+ is the latest version of this utility-first CSS framework, and it’s packed with features that make styling as easy as ordering biryani online. Unlike traditional CSS, where you write custom stylesheets, TailwindCSS gives you pre-defined utility classes that you can apply directly in your HTML. For example, instead of writing:
.button { background-color: blue; padding: 10px 20px; border-radius: 5px; }
You just add classes like this:
<button class="bg-blue-500 p-4 rounded">Click Me</button>
Chalo, this is all fine, but where does module.exports
fit into this? In TailwindCSS, configuration is handled through a JavaScript (or TypeScript) file called tailwind.config.js
. This file is where you define your custom themes, colors, fonts, and other settings. And guess what? This file uses module.exports
to export its configuration! Let’s see how it works.
Understanding tailwind.config.js
The tailwind.config.js
file is the heart of your TailwindCSS project. It’s where you customize everything – from colors to breakpoints to custom utilities. Here’s a basic example of a tailwind.config.js
file:
module.exports = { content: [ "./src/**/*.{html,js,ts,jsx,tsx}", ], theme: { extend: { colors: { primary: "#ff4500", secondary: "#00ff00", }, }, }, plugins: [], };
Yeh dekho! The module.exports
is right there, exporting the configuration object. But what if you’re working in an environment where you can’t use module.exports
? Maybe you’re working in a browser-based setup, or you want to define TailwindCSS configurations directly in CSS syntax. Is there a way to achieve the same thing without JavaScript? Let’s explore!
CSS Syntax Equivalent for module.exports
Arrey bhai, here’s the million-rupee question: how do you replicate module.exports
in CSS? The short answer is, you can’t directly. CSS is a styling language, not a module system like JavaScript. But don’t lose hope! TailwindCSS 4+ provides ways to achieve similar functionality through CSS custom properties (variables), utility classes, and the new @config
directive. Let’s break it down.
1. Using CSS Custom Properties (Variables)
One way to mimic the modularity of module.exports
is by using CSS custom properties. These are like variables in CSS that you can define once and reuse throughout your stylesheet. For example, instead of exporting colors in tailwind.config.js
, you can define them in a CSS file:
:root { --primary-color: #ff4500; --secondary-color: #00ff00; } .bg-primary { background-color: var(--primary-color); } .text-primary { color: var(--primary-color); }
This is similar to how you’d define colors in tailwind.config.js
and then use them in your HTML. The advantage? You can keep your styles modular and reusable without relying on JavaScript.
2. The @config Directive in TailwindCSS 4+
TailwindCSS 4+ introduces a new @config
directive, which allows you to define Tailwind configurations directly in your CSS files. This is a game-changer! Instead of relying on tailwind.config.js
, you can write something like this:
@config { theme: { colors: { primary: "#ff4500", secondary: "#00ff00", }, }, } @tailwind base; @tailwind components; @tailwind utilities;
Yeh dekho, no module.exports
needed! The @config
directive lets you define your Tailwind configuration right in your CSS file. This is especially useful if you’re working in a setup where JavaScript is limited or you want to keep everything in one place.
3. CSS Modules for Component-Based Styling
If you’re working with a modern frontend framework like React or Vue, you can use CSS Modules to achieve a modular approach similar to module.exports
. CSS Modules allow you to scope styles locally to components, making them reusable and encapsulated. Here’s an example with React:
/* styles.module.css */ .button { background-color: var(--primary-color); padding: 10px 20px; border-radius: 5px; }
// Button.js import styles from "./styles.module.css"; function Button() { return <button className={styles.button}>Click Me</button>; } export default Button;
This approach mimics the modularity of module.exports
by keeping styles scoped to specific components, just like how you’d export specific functions or objects in JavaScript.
Practical Example: Building a Modular Theme with TailwindCSS 4+
Chalo, let’s get our hands dirty with a practical example. Suppose you’re building a website for a local Indian startup, and you want to create a reusable theme with TailwindCSS 4+. Here’s how you can do it using CSS custom properties and the @config
directive:
/* styles.css */ @config { theme: { extend: { colors: { brand: { primary: "#ff4500", secondary: "#00ff00", }, accent: "#ffd700", }, fontFamily: { sans: ["Inter", "sans-serif"], }, }, }, } :root { --brand-primary: #ff4500; --brand-secondary: #00ff00; --accent-color: #ffd700; } @tailwind base; @tailwind components; @tailwind utilities; .btn-primary { @apply bg-[var(--brand-primary)] text-white px-4 py-2 rounded; } .btn-secondary { @apply bg-[var(--brand-secondary)] text-white px-4 py-2 rounded; }
Now, in your HTML, you can use these classes like this:
<button class="btn-primary">Primary Button</button> <button class="btn-secondary">Secondary Button</button>
This setup gives you the modularity of module.exports
without needing a JavaScript file. You define your theme in CSS, and TailwindCSS processes it to generate the necessary utility classes.
Key Features of TailwindCSS 4+ for Modularity
@config
directive, you can define your Tailwind configuration directly in CSS, reducing reliance on JavaScript.module.exports
.@apply
directive, you can create component-specific styles that are reusable across your project.tailwind.config.js
entirely and rely on CSS-based configuration.How to Implement CSS-Based Modularity in Your Project
Now that you know the theory, let’s talk about how to implement this in your project. Here’s a step-by-step guide:
- Set Up TailwindCSS 4+: Install TailwindCSS using npm or a CDN. For npm, run:
npm install -D tailwindcss
and initialize withnpx tailwindcss init
. - Create a CSS File: Create a
styles.css
file and include the@config
directive to define your theme. - Define Custom Properties: Add CSS custom properties in the
:root
scope for colors, fonts, or other reusable values. - Use @apply for Components: Create reusable component classes using Tailwind’s
@apply
directive. - Integrate with HTML: Apply your utility or component classes in your HTML files.
Challenges and Limitations
Arrey, everything sounds good, but there are some challenges to keep in mind:
- No Dynamic Exports: Unlike
module.exports
, CSS custom properties and@config
can’t handle dynamic logic or functions. - Limited Scope: CSS-based configurations are great for static themes but may not be as flexible as JavaScript for complex projects.
- Learning Curve: If you’re new to TailwindCSS, understanding how to combine
@config
,@apply
, and custom properties might take some time.
Final Thoughts
Arrey bhai, we’ve covered a lot of ground in this 5000+ word guide! From understanding module.exports
to exploring CSS-based alternatives in TailwindCSS 4+, you now have the tools to create modular, reusable styles without relying on JavaScript. Whether you use CSS custom properties, the @config
directive, or CSS Modules, TailwindCSS 4+ makes it easy to achieve the same level of modularity as module.exports
.
So, go ahead, experiment with these techniques, and make your web projects as vibrant as a Diwali celebration! If you have any questions or need more examples, drop a comment below or ping me on WhatsApp (just kidding about that last part, unless you really want to share some chai recipes!). Happy coding!