Mostrando entradas con la etiqueta import. Mostrar todas las entradas
Mostrando entradas con la etiqueta import. Mostrar todas las entradas

domingo, 29 de junio de 2025

La función del @ en los imports de Javascript / Typescript

 ¿Por qué hay una '@' en algunos imports?


La @ al principio de una ruta de importación en JavaScript (como en @inertiajs/react o @/components) tiene dos significados principales, dependiendo del contexto, pero ambos buscan hacer las importaciones más claras y fáciles de manejar:


1. @ para Paquetes con "Scope" (Scoped Packages)

Este es el uso más formal y estandarizado en el ecosistema de paquetes de Node.js y npm/Yarn.

  • ¿Qué es? Un paquete "scoped" (con ámbito) es un paquete de npm cuyo nombre comienza con @ seguido del nombre de un "scope" (alcance o ámbito) y una barra (/), y luego el nombre real del paquete.

  • Formato: @scope/package-name

  • Propósito:

    • Organización: Permite que las organizaciones o equipos publiquen múltiples paquetes bajo un mismo "nombre de equipo" o "namespace" sin conflictos de nombres. Por ejemplo, todos los paquetes oficiales de React de Meta se encuentran bajo el scope @types para TypeScript (como @types/react, @types/node).

    • Paquetes Oficiales/Relacionados: A menudo, los scopes se utilizan para denotar paquetes oficiales o relacionados con un proyecto principal. En tu ejemplo, @inertiajs/react es el paquete oficial de React para el framework Inertia.js. Si hubiera un paquete para Vue, probablemente sería @inertiajs/vue.

    • Evitar Colisiones: Garantiza que los nombres de los paquetes sean únicos. Por ejemplo, varias personas podrían querer publicar un paquete llamado utils, pero solo una puede hacerlo. Con scopes, @myorg/utils y @anotherorg/utils pueden coexistir.

Ejemplo:

JavaScript
import { Head, Link, usePage } from '@inertiajs/react'; // Paquete "scoped"

Aquí, @inertiajs es el scope, y react es el nombre del paquete dentro de ese scope. Cuando instalas esto, lo haces con npm install @inertiajs/react.


2. @ para Alias de Rutas (Path Aliases)

Este es un uso más común en proyectos de frontend (como los construidos con Vite, Webpack, Next.js, etc.) y no está directamente relacionado con paquetes de npm.

  • ¿Qué es? Es una convención para definir rutas abreviadas que apuntan a directorios específicos dentro de tu propio proyecto.

  • Propósito:

    • Evitar Rutas Relativas Largas: Imagina que tienes un componente anidado muy profundo: src/pages/dashboard/users/components/UserCard.jsx. Si necesitas importar un utility que está en src/utils/formatters.js, la importación relativa sería ../../../../utils/formatters. Esto es propenso a errores y difícil de leer.

    • Estabilidad: Si mueves el archivo UserCard.jsx, tendrías que actualizar la ruta relativa. Con un alias, la ruta absoluta del alias permanece constante.

    • Claridad: import { formatCurrency } from '@/utils/formatters'; es mucho más claro que la ruta relativa.

  • Configuración: Estos alias se configuran en la herramienta de compilación (bundler) o en el archivo de configuración de TypeScript:

    • Vite: En vite.config.js (usando el plugin @rollup/plugin-alias).

    • Webpack: En webpack.config.js.

    • Next.js: Soporte nativo para @/.

    • TypeScript: En tsconfig.json bajo la sección paths.

Ejemplo:

JavaScript
import MyButton from '@/components/MyButton'; // Alias
import API from '@/api/index';              // Alias

Aquí, @ no significa un scope de npm. En cambio, es un alias configurado que podría apuntar a la carpeta src/ o src/components, dependiendo de tu configuración.


Conclusión

Así que, cuando veas una @ en una importación:

  • Si está seguida de una barra y otro nombre (@scope/package), es un paquete con "scope" de npm.

  • Si está seguida de un nombre de carpeta y luego el nombre de un archivo (@/folder/file), es un alias de ruta configurado en tu proyecto.

Ambos usos contribuyen a un código más organizado, legible y, en el caso de los alias, más fácil de mantener.