Saltar al contenido

⚛️ Como crear un proyecto React desde cero con TypeScript, TailwindCSS y ESLint usando Vite

Hola a todos y bienvenidos a un nuevo post. En esta ocasión vamos a crear un proyecto React desde cero con TypeScript, TailwindCSS y ESLint.

Creación del proyecto con Vite

Para crear el proyecto vamos a usar Vite, un generador de proyectos que nos permite crear proyectos Vanilla, React, Preact, Vue, Svelte y Lit con un solo comando, además de sus versiones con TypeScript.

Necesitaremos tener instalado Node.js y un gestor de paquetes como npm (puedes usar otro pero en el tutorial usaré npm).

Para instalar Vite, ejecutaremos el siguiente comando:

npm create vite@latest

El asistente nos pedirá que respondamos a unas preguntas para crear el proyecto.

? Project name: › vite-project

Introducimos el nombre del proyecto.

? Select a framework: › - Use arrow-keys. Return to submit.
    Vanilla
    Vue
❯   React
    Preact
    Lit
    Svelte
    Others

Seleccionamos el framework que queremos usar. En nuestro caso, vamos a usar "React".

? Select a variant: › - Use arrow-keys. Return to submit.
    JavaScript
    TypeScript
    JavaScript + SWC
❯   TypeScript + SWC

Seleccionamos la variante que queremos usar. En nuestro caso, vamos a usar "TypeScript + SWC" (SWC es un compilador y empaquetador de JavaScript mucho más rápido que Babel).

Acto seguido Vite nos generará el proyecto y nos pedirá que entremos a la carpeta del proyecto e instalemos las dependencias.

Instalación y configuración de ESLint

ESLint es una herramienta que nos permite analizar el código JavaScript para encontrar potenciales problemas y errores. Además, nos permite configurar reglas para que el código siga un estilo determinado.

Para sacar el máximo potencial de ESLint, necesitaremos descargarnos la extensión de ESLint para nuestro editor de código. En mi caso, usaré Visual Studio Code, por lo que descargaremos la extensión ESLint.

Para instalar ESLint en nuestro proyecto, instalaremos ESLint como dependencia de desarrollo:

npm install -D eslint

Ahora que hemos instalado ESLint, vamos a crear un fichero de configuración para que ESLint sepa cómo analizar nuestro código. Para ello usaremos el asistente oficial de ESLint para crear un fichero de configuración.

npm init @eslint/config

Nos hará una serie de preguntas a las que contestaremos dependiendo de nuestras preferencias. Podéis seleccionar las opciones que queráis, yo usaré las siguientes.

? How would you like to use ESLint? …
  To check syntax only
  To check syntax and find problems
▸ To check syntax, find problems, and enforce code style

Seleccionamos "To check syntax, find problems, and enforce code style" porque queremos que ESLint nos ayude a encontrar problemas y errores en nuestro código, además de que nos ayude a mantener un estilo de código consistente.

? What type of modules does your project use? …
▸ JavaScript modules (import/export)
  CommonJS (require/exports)
  None of these

Seleccionamos "JavaScript modules (import/export)" porque nuestro proyecto usamos EcmaScript Modules.

? Which framework does your project use? …
▸ React
  Vue.js
  None of these

Seleccionamos "React" porque nuestro proyecto usa React.

? Does your project use TypeScript? ‣ No / Yes

Seleccionamos "Yes" porque nuestro proyecto usa TypeScript.

? Where does your code run? …  (Press <space> to select, <a> to toggle all, <i> to invert selection)
✔ Browser
✔ Node

Por defecto, está seleccionado "Browser" (React corre en el navegador), así que no tenemos que hacer nada.

? How would you like to define a style for your project? …
▸ Use a popular style guide
  Answer questions about your style

Seleccionamos "Use a popular style guide" porque queremos usar una guía de estilo popular.

? Which style guide do you want to follow? …
▸ Standard: https://github.com/standard/eslint-config-standard-with-typescript
  XO: https://github.com/xojs/eslint-config-xo-typescript

Seleccionamos "Standard" porque es la guía de estilo que más me gusta.

? What format do you want your config file to be in? …
▸ JavaScript
  YAML
  JSON

Seleccionamos "JavaScript" porque así podemos estilar y añadir comentarios al fichero de configuración.

? Would you like to install them now? ‣ No / Yes

Seleccionamos "Yes" para que ESLint instale las dependencias y cree el fichero de configuración.

? Which package manager do you want to use? …
▸ npm
  yarn
  pnpm

Finalmente seleccionamos "npm" porque es el gestor de paquetes que estamos usando (selecciona el que hayas usado).

Una vez terminado el asistente, ESLint nos habrá creado un fichero de configuración en la raíz del proyecto. En nuestro caso, se llamará .eslintrc.cjs y tendrá el siguiente contenido:

module.exports = {
  env: {
    browser: true,
    es2021: true
  },
  extends: [
    'plugin:react/recommended',
    'standard-with-typescript'
  ],
  overrides: [
  ],
  parserOptions: {
    ecmaVersion: 'latest',
    sourceType: 'module'
  },
  plugins: [
    'react'
  ],
  rules: {
  }
}

Ya hemos instalado ESLint y hemos creado el fichero de configuración. Si ahora vamos al fichero App.tsx dentro de la carpeta src, no parece que haya pasado nada. Esto es porque tenemos que hacer un paso extra para que ESLint funcione con TypeScript.

Necesitamos decirle a ESLint donde está la configuración de TypeScript. Para ello, modificaremos el fichero de configuración de la siguiente manera:

module.exports = {
  env: {
    browser: true,
    es2021: true
  },
  extends: [
    'plugin:react/recommended',
    'standard-with-typescript'
  ],
  overrides: [
  ],
  parserOptions: {
    ecmaVersion: 'latest',
    sourceType: 'module',
    project: './tsconfig.json' // AÑADIMOS ESTA LÍNEA
  },
  plugins: [
    'react'
  ],
  rules: {
  }
}

Ahora si que deberíamos ver los errores de ESLint en nuestro editor de código. Si no es así, reinicia el editor de código y vuelve a abrir el fichero App.tsx.

Verás que hay un error que se repite mucho: 'React' must be in scope when using JSX. Esto es porque no hemos importado React en los ficheros .tsx. Pero resulta que con Vite no es necesario, así que vamos a deshabilitar esa regla en el fichero de configuración de ESLint.

module.exports = {
  env: {
    browser: true,
    es2021: true
  },
  extends: [
    'plugin:react/recommended',
    'standard-with-typescript'
  ],
  overrides: [
  ],
  parserOptions: {
    ecmaVersion: 'latest',
    sourceType: 'module',
    project: './tsconfig.json'
  },
  plugins: [
    'react'
  ],
  rules: {
    'react/react-in-jsx-scope': 'off' // DESHABILITAMOS ESTA REGLA
  }
}

Y listo, ahora ese error ya no nos debería molestar más.

Instalación de TailwindCSS

Ahora que ya tenemos nuestro proyecto configurado, vamos a instalar TailwindCSS. Para ello instalaremos las siguientes dependencias:

npm install -D tailwindcss postcss autoprefixer

Una vez instaladas las dependencias, vamos a crear un fichero de configuración de TailwindCSS. Para ello, ejecutaremos el siguiente comando:

npx tailwindcss init -p

Esto nos creará dos ficheros, tailwind.config.cjs y postcss.config.cjs. El primero es el fichero de configuración de TailwindCSS y el segundo es el fichero de configuración de PostCSS. Nosotros solo tenemos que modificar el fichero de configuración de TailwindCSS.

Por defecto, el fichero de configuración de TailwindCSS tendrá el siguiente contenido:

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: [],
  theme: {
    extend: {},
  },
  plugins: [],
}

Y lo vamos a modificar para que se vea así:

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: [
    './index.html',
    './src/**/*.{js,ts,jsx,tsx}'
  ], // MODIFICAMOS ESTE BLOQUE
  theme: {
    extend: {},
  },
  plugins: [],
}

Finalmente, abrimos el fichero index.css y añadimos al principio del todo el siguiente código:

@tailwind base;
@tailwind components;
@tailwind utilities;

Y listo, ya tenemos TailwindCSS instalado y configurado.

Sorpresa final

Si has llegado hasta aquí, déjame agradecertelo. He creado un repositorio plantilla de Vite con React, TypeScript, TailwindCSS y ESLint ya configurados. Puedes descargarlo y usarlo como base para tus proyectos.

Ejecuta el siguiente comando para descargar el repositorio:

npx degit dserranoc/vite-reactts18-eslint-tailwindcss NOMBRE-DEL-PROYECTO

Entra a la carpeta del proyecto y ejecuta el siguiente comando para instalar las dependencias:

npm install

Y por último, ejecuta el siguiente comando para iniciar el servidor de desarrollo:

npm run dev

Y eso es todo. Espero que te haya gustado el tutorial y que te haya servido de gran ayuda. Nos vemos en el siguiente post 😁.