- ¿Cómo luce el punto de entrada en una aplicación?
- ¿Y qué pasa con las bibliotecas?
- Proyecto que es aplicación y también biblioteca
Cuando comenzamos a crear un proyecto en JavaScript, ya sea una aplicación o una biblioteca, necesitamos saber por dónde empieza todo. Ese primer archivo que se ejecuta es lo que llamamos el punto de entrada (en inglés, entry point).
Para entenderlo mejor, pensemos en una aplicación como una obra de teatro. El punto de entrada sería la primera escena: la que da inicio a todo lo que viene después. Sin esa primera escena, los actores no sabrían qué hacer.
¿Cómo luce el punto de entrada en una aplicación?
A veces nuestros proyectos tienen muchos archivos, pero siempre hay uno que se encarga de poner todo en marcha. Veamos un ejemplo sencillo:
Estructura del proyecto
.
├── index.js
├── package.json
└── src
└── my-application
└── index.js
Archivos involucrados
// src/my-application/index.js
export default () => console.log('¡Bienvenido a mi aplicación!');
Este archivo define una función. Lo único que hace es mostrar un mensaje en la consola.
// index.js
import app from './src/my-application/index.js';
app(); // Ejecutamos la función
Este segundo archivo es nuestro punto de entrada. Importa el archivo anterior y lo ejecuta.
¿Qué pasa si ejecutamos esto?
Si abrimos una terminal y escribimos:
node index.js
Veremos en la consola:
¡Bienvenido a mi aplicación!
En este proyecto, index.js es claramente el punto de entrada. Es donde empieza todo.
¿Y qué pasa con las bibliotecas?
En las bibliotecas, el uso del punto de entrada es distinto. No se ejecuta automáticamente como en una aplicación. En lugar de eso, las bibliotecas contienen funciones listas para ser usadas cuando las necesitemos.
Por ejemplo, Lodash es una biblioteca que tiene muchas funciones útiles. Supongamos que solo queremos una:
import { random } from 'lodash';
console.log(random(0, 5)); // Un número aleatorio entre 0 y 5
Aquí usamos solo una función, pero no indicamos ningún archivo específico. Node.js sabe dónde buscar porque cada biblioteca define su punto de entrada en el archivo package.json.
Revisemos un package.json básico:
| Clave | Valor |
|---|---|
"name" |
"mi-biblioteca" |
"type" |
"module" |
"version" |
"1.0.0" |
"main" |
"src/index.js" |
La propiedad "main" le dice a Node.js qué archivo exporta la funcionalidad principal de la biblioteca.
Así, cuando alguien instala tu paquete, puede acceder a sus funciones sin preocuparse por la ruta exacta del archivo.
Proyecto que es aplicación y también biblioteca
Veamos un ejemplo con algo práctico. Imaginemos que queremos crear una herramienta para calcular el año de nacimiento según la edad.
Versión solo como aplicación
// index.js
console.log('¿Cuántos años tienes?');
const age = 18; // Supongamos que esta es la edad ingresada
const birthYear = 2005; // Año calculado manualmente
console.log(`Tu año de nacimiento: ${birthYear}`);
Funciona, pero no es flexible. Si queremos reutilizar la fórmula en otra parte, sería mejor tenerla en una función separada.
Mejorando el proyecto: aplicación + biblioteca
Vamos a mover la lógica a un archivo independiente:
// src/index.js
export default function getBirthYear(age) {
return new Date().getFullYear() - age; // Resta para calcular el año
}
// index.js
import getBirthYear from './src/index.js';
console.log('¿Cuántos años tienes?');
const age = 18;
const birthYear = getBirthYear(age);
console.log(`Tu año de nacimiento: ${birthYear}`);
Ahora tenemos dos archivos: uno que contiene la lógica y otro que actúa como punto de entrada para la aplicación.
Además, si en package.json definimos:
| Clave | Valor |
|---|---|
"name" |
"calculador-edad" |
"version" |
"1.0.0" |
"type" |
"module" |
"main" |
"src/index.js" |
Hacemos que el archivo src/index.js también sea el punto de entrada de la biblioteca. Esto significa que otros proyectos podrían importar nuestra función fácilmente.
// En otro proyecto
import getBirthYear from 'calculador-edad';
console.log(getBirthYear(30)); // 1994 (por ejemplo)
Resumen
- El punto de entrada es el archivo principal donde arranca una aplicación o una biblioteca.
- En una aplicación, ese archivo ejecuta la lógica inicial del programa.
- En una biblioteca, el punto de entrada define las funciones que estarán disponibles para otros proyectos.
- Se define normalmente en el archivo
package.jsonusando la propiedad"main". - Dividir la lógica en archivos o módulos nos ayuda a tener un código más limpio, reutilizable y fácil de mantener.
- Un mismo proyecto puede funcionar como aplicación y como biblioteca, si organizamos correctamente su estructura.
Trabajo independiente
Mejora tu código: organiza y optimiza
Ahora que ya sabes ejecutar tu archivo, vamos a separar mejor el código en carpetas. Es una práctica común en proyectos reales. También te mostraremos cómo importar solo lo necesario para hacer tu proyecto más liviano.
1️⃣ Si solo necesitas una función de lodash, como debounce, no es necesario importar todo:
// ❌ Mala práctica: importa toda la librería
import _ from "lodash";
// ✅ Mejor: importa solo lo que necesitas
import { debounce } from "lodash";
2️⃣ Crea una carpeta llamada src para guardar tu código principal:
mkdir -p src mv index.js src/
3️⃣ Abre src/index.js y exporta tu función:
export function miFuncion() {
console.log("Hola desde codica-js");
}
4️⃣ En la raíz del proyecto, crea un nuevo archivo index.js. Este será tu "archivo lanzador", que solo se encarga de ejecutar el resto del código:
import { miFuncion } from "./src/index.js";
miFuncion();
5️⃣ No es necesario cambiar "main" en package.json si vas a seguir ejecutando el archivo raíz (index.js) con npm start.
6️⃣ Sube los cambios a GitHub:
git add . git commit -m "Refactor: mover lógica a src y optimizar importaciones" git push origin main
✅ ¡Tu proyecto ahora tiene una estructura más ordenada!
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.