lunes, 22 de diciembre de 2025

Alias de rutas Typescript

 ¿Hay alguna herramienta de la build chain que permite en Typescript hacer imports a paths como @/components, y que los encuentre en un alias, digamos en /resources/js/components?

Sí, Gabriel 👌. Eso se logra configurando alias de paths en tu build chain. En proyectos Laravel + React + TypeScript, lo más común es que uses Vite (desde Laravel 9/10) o Webpack (si es más viejo). Ambos soportan alias, y TypeScript también necesita saberlos para resolver los imports.

🔹 En Vite (Laravel moderno)

  1. Instalar el helper de paths:

    bash
    npm install -D vite-tsconfig-paths
    

    (este plugin hace que Vite respete los alias definidos en tsconfig.json).

  2. Configurar vite.config.js:

    js
    import { defineConfig } from 'vite'
    import react from '@vitejs/plugin-react'
    import tsconfigPaths from 'vite-tsconfig-paths'
    
    export default defineConfig({
      plugins: [react(), tsconfigPaths()],
    })
    
  3. Configurar tsconfig.json:

    json
    {
      "compilerOptions": {
        "baseUrl": "./resources/js",
        "paths": {
          "@/*": ["*"]
        }
      }
    }
    

👉 Ahora podés hacer:

ts
import Button from "@/components/Button"

y TypeScript + Vite lo van a resolver a resources/js/components/Button.

🔹 En Webpack (Laravel Mix)

Si tu proyecto usa Mix (Webpack), podés definir alias en webpack.mix.js:

js
const mix = require('laravel-mix');

mix.webpackConfig({
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'resources/js'),
    },
  },
});

Y en tsconfig.json igual que antes:

json
{
  "compilerOptions": {
    "baseUrl": "./resources/js",
    "paths": {
      "@/*": ["*"]
    }
  }
}

🔹 Ventajas de usar alias

  • Evitás imports largos y frágiles como ../../../components/Button.

  • Centralizás la ruta base (resources/js).

  • Mejor autocompletado en editores.

  • Escalable: podés definir varios alias (@hooks, @utils, etc.).

✨ En resumen: sí, podés usar alias como @/components. La herramienta depende de tu build chain:

  • Vitevite-tsconfig-paths + tsconfig.json.

  • Webpack/Mixresolve.alias + tsconfig.json.

¿Querés que te arme un ejemplo listo para copiar de configuración Laravel + Vite + React + TypeScript con alias @/components funcionando de punta a punta?

domingo, 21 de diciembre de 2025

Colores Tailwind vs. variables CSS

 ¿Cuál es la diferencia, las ventajas y desventajas de definir un color directamente en tailwind.config.js o crear una variable CSS?

Muy buena pregunta, Gabriel 👌. La diferencia entre definir un color directamente en tailwind.config.js y usar una variable CSS (--color-primary) está en el nivel de control y flexibilidad que buscás.

🔹 Definir color en tailwind.config.js

Cómo funciona

js
// tailwind.config.js
module.exports = {
  theme: {
    extend: {
      colors: {
        brand: "#1E40AF",
      },
    },
  },
};

Luego lo usás con clases como bg-brand, text-brand, fill-brand.

Ventajas

  • Integración directa con Tailwind: todas las utilidades (bg-, text-, fill-, stroke-) se generan automáticamente.

  • Consistencia: el color queda centralizado en la configuración, fácil de mantener.

  • Autocompletado: muchos editores reconocen los nombres de colores definidos en Tailwind.

  • Sin dependencias externas: no necesitás definir variables CSS aparte.

Desventajas

  • Menos dinámico: cambiar el color requiere recompilar Tailwind.

  • Temas múltiples: no es tan sencillo alternar entre paletas (ej. modo oscuro, temas personalizados).

  • No se puede modificar en runtime: el color queda fijo en el build.

🔹 Usar una variable CSS (--color-primary)

Cómo funciona

css
:root {
  --color-primary: #1E40AF;
}
.dark {
  --color-primary: #F59E0B;
}
js
// tailwind.config.js
module.exports = {
  theme: {
    extend: {
      colors: {
        primary: "var(--color-primary)",
      },
    },
  },
};

Ventajas

  • Dinámico: podés cambiar el valor de la variable en runtime (ej. con JavaScript o cambiando clases).

  • Temas múltiples: muy fácil de implementar (ej. data-theme="dark" redefine variables).

  • Interoperabilidad: las variables CSS pueden usarse fuera de Tailwind también.

  • Flexibilidad: podés animar o transicionar colores cambiando la variable.

Desventajas

  • Más configuración: tenés que definir las variables en tu CSS además de en Tailwind.

  • Menos autocompletado: los nombres de variables no aparecen como sugerencias en algunos editores.

  • Dependencia del runtime: si la variable no está definida correctamente, el color puede no renderizarse.

🔹 Comparación rápida

AspectoTailwind config directoVariable CSS
Facilidad inicialMuy simple, todo en TailwindRequiere definir variables en CSS
Cambio en runtimeNo posible (requiere rebuild)Sí, dinámico
Temas múltiplesMás complejo, requiere plugins o duplicar paletasNatural y flexible
AutocompletadoMejor soporte en editoresLimitado
Uso fuera de TailwindNoSí, variables CSS son globales

✨ Conclusión

  • Si tu proyecto tiene una paleta fija y estable, definir colores en tailwind.config.js es lo más simple y directo.

  • Si necesitás temas dinámicos, modo oscuro avanzado o cambiar colores en runtime, conviene usar variables CSS y referenciarlas desde Tailwind.

¿Querés que te arme un ejemplo práctico de tema claro/oscuro donde el color fill-primary cambia automáticamente usando variables CSS?