DEV Community

Cover image for How to configure ESLint, Prettier, Husky, Lint-staged into a React project with TypeScript and Tailwind CSS
Remi W.
Remi W.

Posted on • Originally published at creativedesignsguru.com

How to configure ESLint, Prettier, Husky, Lint-staged into a React project with TypeScript and Tailwind CSS

As a software developer, you have preferences and habits that you want to follow when writing your code. You want to be able to write code that is readable, maintainable, and scalable.

When you are working in a team with other developers, everybody has their own coding standards and they can be different. It makes the code difficult to read and maintain. How do you settle the differences? You will have to reach a compromise and pick a preferred style for that project.

Tools such as ESLint, Prettier, Husky, and Lint-staged can help enforce a coding and formatting style. It also spots errors rapidly in your JS application. These tools keep developers focused on solving problems rather than debating which formatting style is best. They also help you to write code unified code across all your projects.

ESLint is a code analysis tool, or linter, for identifying and reporting on patterns in JS. It's a pluggable and configurable tool that finds and fixes problems in your JavaScript or Node.js code.

Prettier is an opinionated code formatter that formats your code according to a set of rules. It ensures that your programs follow a consistent coding style.

Adding ESLint, Prettier, and Husky to your React project will avoid mistakes in your code by making sure that your code follows best practices. It also helps developers write a consistent code style.

For your information, I'm the author of a boilerplate with ESLint, Prettier, Husky, and Lint-staged already configured and ready to use. If you don't want to lose your time, you can check out my React Boilerplate on GitHub.

In this article, I will guide you through how to configure these tools stated above.

Empty Project Setup

You will need to create a TypeScript React project using create-next-app. Then, you also need to install and configure all the necessary NPM packages.

React & TypeScript Configuration

TypeScript is an open-source typed programming language developed by Microsoft. It builds on top of JavaScript with a strict syntax and type checking.

πŸš€ Open your favorite terminal

πŸš€ Run npx create-next-app@latest --ts to create a TypeScript Next.js project.

npx create-next-app@latest --ts
Enter fullscreen mode Exit fullscreen mode

ESLint Configuration

ESLint is highly configurable and can be configured to enforce a specific coding style. You can set up ESLint rules one by one or you can use a preset.

In this tutorial, we will use the Airbnb style guide for TypeScript: eslint-config-airbnb-typescript.

πŸš€ Add ESLint to the project dependency list

npm i eslint --save-dev
Enter fullscreen mode Exit fullscreen mode

πŸš€ Install Airbnb ESLint style guide dependencies and its peer dependencies.

npm install eslint-config-airbnb-typescript @typescript-eslint/eslint-plugin @typescript-eslint/parser --save-dev
Enter fullscreen mode Exit fullscreen mode

πŸš€ Create and configure the .eslintrc file by adding Airbnb and ESLint configuration. We also need to indicate to ESLint that we are using TypeScript. We'll also add next/core-web-vitals to use a stricter ESLint configuration for Next.js:

{
  "extends": ["next/core-web-vitals", "airbnb", "airbnb-typescript"],
  "parserOptions": {
    "project": "./tsconfig.json"
  }
}
Enter fullscreen mode Exit fullscreen mode

πŸš€ Add Prettier, eslint-plugin-prettier, eslint-plugin-prettier to the project's dependency.

npm install  prettier eslint-plugin-prettier eslint-config-prettier --save-dev
Enter fullscreen mode Exit fullscreen mode

These three packages load Prettier into ESLint. ESLint will automatically highlight formatting issues in your code based on Prettier rules.

πŸš€ Install the eslint-plugin-unused-imports plugin, it helps you to find unused imports.

npm install eslint-plugin-unused-imports --save-dev
Enter fullscreen mode Exit fullscreen mode

πŸš€ Add unused-imports to the plugins section of your .eslintrc configuration file. You can omit the eslint-plugin- prefix:

...
  "plugins": ["unused-imports"]
...
Enter fullscreen mode Exit fullscreen mode

πŸš€ Install eslint-plugin-tailwindcss to lint Tailwind CSS class. It contains rules enforcing best practices and consistency when working with Tailwind CSS.

npm i eslint-plugin-tailwindcss --save-dev
Enter fullscreen mode Exit fullscreen mode

πŸš€ Add tailwindcss to the plugins section of your .eslintrc configuration file:

{
  "plugins": ["unused-imports", "tailwindcss"]
}
Enter fullscreen mode Exit fullscreen mode

πŸš€ Then, you need to add all the recommended rules from the Tailwind CSS plugin:

{
  "extends": [..., "plugin:tailwindcss/recommended"]
}
Enter fullscreen mode Exit fullscreen mode

πŸš€ Lint all the .js, .jsx, .ts, and .tsx files within the project folder. After running the command below, it'll display all the errors you need to address.

npx eslint . --ext .js,.jsx,.ts,.tsx
Enter fullscreen mode Exit fullscreen mode

πŸš€ node_modules is ignored by ESLint in the default configuration. You can also add more files to ignore by creating a .eslintignore file.

Husky and Lint-staged Setup

Husky is a JavaScript package that allows you to run some code during different stages of the git workflow. On the other hand, Lint-staged is a JavaScript package that helps you to run linter on files that will be committed on Git.

πŸš€ Initialize Git in the project directory.

git init
Enter fullscreen mode Exit fullscreen mode

πŸš€ Install Husky and Lint Staged.

npx mrm@2 lint-staged
Enter fullscreen mode Exit fullscreen mode

The code above command will install and configure Husky and Lint-staged. Add lint-staged and husky in the package.json file. It also creates a .husky folder.

πŸš€ Optional: You can create a lint-staged.config.js file that holds all the Lint-staged configuration. Check out all the different ways to configure lint-staged if you don't want Lint-stage configuration in your package.json.

VSCode ESLint & Prettier Configuration

Visual Studio Code provides ESLint and Prettier extensions that you can install. These extensions give you access to all functionalities discussed in this tutorial.

To install these extensions:

πŸš€ Open your VS Code

πŸš€ Click on the Extensions icon on the sidebar or run the command Ctrl + Shift + x.

πŸš€ Search for "dbaeumer.vscode-eslint" to install ESLint and "esbenp.prettier-vscode" for Prettier.

πŸš€ Close and re-open VSCode to use the newly installed extensions.

Conclusion

Integrating ESLint, Prettier, Husky, and Lint-staged in a TypeScript React project reduce conflicts based on coding and formatting styles. It helps developers to focus on writing high-quality code.

If you are working on a project, it's highly recommended to have these tools set up first. You can avoid making mistakes in your code: it makes your code more readable with a consistent coding style.

If you're building your own SaaS application and want to have the same Developer experience, I've made a React SaaS Starter kit. It includes by default ESLint, Prettier, Husky, and Lint-staged already configured with TypeScript for you. So, you can start working on your SaaS project right away instead of losing your time with boring configurations.

In Nextless.js, you'll also find everything you need to build faster your SaaS:

  • Email & Social auth
  • Subscription payment
  • Team support
  • Landing page & Dashboard
  • Form & Error management
  • Deployed on AWS

React SaaS Template Starter

Top comments (0)