Prerequisites
Before starting the project make sure to install the following utilities:
Creating a new Express application
Let's create a fresh Express application so that we can go through all the steps together.
Step 1
Create new project.
mkdir my-project
cd my-project
npm init -y
Step 2
Install Express.
npm install express
Step 3
Install EJS. Depending on your requirements, you can choose other template engines. However, for this tutorial, we will be using EJS.
npm install ejs
Step 4
Create a folder named views in the root directory
and add an index.ejs file inside with a classic HTML structure.
Additionally, create a public folder, then within it, create a
css folder and add an input.css file - add your
own css styles there. Attach a link to this file in the
head section.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link href="/css/input.css" rel="stylesheet" />
<title>TWE Express Integration tutorial</title>
</head>
<body>
<main>
<h1>Express application</h1>
</main>
</body>
</html>
Step 5
In the root directory create app.js file where
will be located your Express configuration.
const express = require("express");
const app = express();
const port = 3000;
app.set("view engine", "ejs");
app.use(express.static("public"));
app.get("/", (req, res) => {
res.render("index");
});
app.listen(port, () => {
console.log(`Example app listening on port ${port}`);
});
Step 6
To see if everything works, run the following command in the terminal:
node app.js
Installing and configuring Tailwind CSS and TW Elements
Step 1
Install Tailwind CSS.
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
File structure
If you have followed all instructions mentioned earlier, your file structure should look like this:
my-project/
├── node_modules/
├── public/
│ └── css/
| | └── input.css
├── views/
│ └── index.ejs
├── app.js
├── package-lock.json
├── package.json
├── postcss.config.js
└── tailwind.config.js
Step 2
Add the paths to all of your template files in your
tailwind.config.js file.
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
"./public/**/*.{js,css}",
"./views/**/*.ejs",
"./node_modules/tw-elements/js/**/*.js",
],
darkMode: "class",
plugins: [require("tw-elements/plugin.cjs")],
};
Step 3
Replace your own styles in input.css file with Tailwind
directives.
@import url("https://fonts.googleapis.com/css?family=Roboto:300,400,500,700,900&display=swap");
@tailwind base;
@layer base {
html {
@apply text-surface;
@apply bg-white;
}
html.dark {
@apply text-neutral-50;
@apply bg-body-dark;
}
}
@tailwind components;
@tailwind utilities;
p {
@apply leading-[1.6];
}
Step 4
Install TW Elements.
npm install tw-elements
Step 5
Update the app.js file to enable serving static files from the
node_modules directory.
...
app.use(express.static("public"));
app.use(express.static("node_modules"));
...
Step 6
In the head section of the index.ejs file,
substitute the href attribute from input.css to
the Tailwind CSS file named output.css, which will be generated
during the Tailwind CLI build process. Furthermore, add a link to the TW
Elements JS at the end of the body tag.
...
<head>
...
<link href="/css/output.css" rel="stylesheet" />
...
</head>
<body>
...
<script
src="/tw-elements/dist/js/tw-elements.umd.min.js"
type="text/javascript"></script>
</body>
...
Step 7
Add the TWE components you intend to use in your project.
...
<main>
<div class="mt-16 flex justify-center">
<p class="text-lg">
Hover the link to see the
<a
href="#"
class="text-primary transition duration-150 ease-in-out hover:text-primary-600 focus:text-primary-600 active:text-primary-700 dark:text-primary-400 dark:hover:text-primary-500 dark:focus:text-primary-500 dark:active:text-primary-600"
data-twe-toggle="tooltip"
title="Hi! I'm tooltip"
>tooltip</a
>
</p>
</div>
</main>
...
Step 8
Start the Tailwind CLI build process. Run the CLI tool to scan your template files for classes and build your CSS.
npx tailwindcss -i ./public/css/input.css -o ./public/css/output.css --watch
And run the local server. Awesome! You're all set to dive into using TW Elements for your Express project. Have fun!
node app.js