Creación y Publicación de Paquetes NPM para Manejo de Fechas
Clase 6 de 20 • Curso de Fundamentos de Node.js
Resumen
La creación de paquetes en NPM es una habilidad fundamental para cualquier desarrollador de Node.js que desee compartir sus soluciones con la comunidad. Aprender a construir, probar y publicar un paquete no solo mejora tu perfil profesional, sino que también contribuye al ecosistema de JavaScript, permitiendo que otros desarrolladores aprovechen tu código para resolver problemas comunes.
¿Cómo crear un paquete para NPM desde cero?
Crear un paquete para NPM requiere seguir una serie de pasos estructurados que garanticen que nuestro código sea accesible y utilizable por otros desarrolladores. En este caso, vamos a construir un paquete llamado "platzi-date" que nos permitirá manejar fechas en dos formatos específicos: timestamp y formato largo.
Inicialización del proyecto
Para comenzar a crear nuestro paquete, debemos seguir estos pasos iniciales:
- Crear un directorio para nuestro paquete:
mkdir platzi-date
cd platzi-date
- Inicializar Git para control de versiones:
git init
- Inicializar el proyecto NPM con configuración por defecto:
npm init -y
Este último comando generará automáticamente un archivo package.json
con la configuración básica que posteriormente modificaremos según nuestras necesidades.
Estructura y desarrollo del código fuente
Una vez inicializado el proyecto, es momento de crear la estructura de archivos y desarrollar la funcionalidad del paquete:
- Crear la carpeta
src
para el código fuente - Crear el archivo principal
index.js
dentro de la carpetasrc
En nuestro archivo index.js
, implementaremos las dos funciones principales:
// Función para obtener el timestamp actual
function getTimeStamp() {
return Date.now();
}
// Función para obtener la fecha en formato largo
function getLongTime(locale = 'es') {
const options = {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric',
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
timeZoneName: 'short'
};
return new Date().toLocaleDateString(locale, options);
}
// Exportar las funciones
module.exports = {
getTimeStamp,
getLongTime
};
La función getTimeStamp()
simplemente retorna el valor actual de tiempo en milisegundos desde el 1 de enero de 1970, utilizando el método nativo Date.now()
.
La función getLongTime()
es más compleja y nos permite formatear la fecha actual en un formato extenso, especificando el idioma mediante el parámetro locale
(que por defecto es español). Esta función utiliza el método toLocaleDateString()
de JavaScript, que acepta opciones de formato para personalizar la salida.
Documentación del paquete
Un buen paquete siempre debe incluir documentación clara. Crearemos un archivo README.md:
# platzi-date
Una utilidad para manejar fechas en formato timestamp y long time.
## Install
```bash
npm install platzi-date
Esta documentación básica explica el propósito del paquete y cómo instalarlo. En un paquete real, sería recomendable añadir ejemplos de uso, API detallada y cualquier otra información relevante.
### Configuración del package.json
El archivo `package.json` es crucial para la publicación de nuestro paquete. Debemos modificarlo para incluir información importante:
```json
{
"name": "platzi-date",
"version": "1.0.0",
"description": "Una utilidad para manejar fechas en formato timestamp y long time",
"main": "src/index.js",
"keywords": ["date", "time", "timestamp"],
"author": "Tu Nombre",
"license": "MIT"
}
Los campos más importantes son:
- name: El nombre único de nuestro paquete
- description: Una breve descripción de la funcionalidad
- main: La ruta al archivo principal del paquete
- keywords: Palabras clave para facilitar la búsqueda
- author: Tu nombre o identificador
- license: El tipo de licencia (MIT es común para proyectos de código abierto)
¿Cómo probar un paquete NPM localmente?
Antes de publicar nuestro paquete, es fundamental probarlo localmente para asegurarnos de que funciona correctamente. NPM proporciona una herramienta llamada npm link
que nos permite crear un enlace simbólico a nuestro paquete local.
Creación del enlace simbólico
Para crear el enlace, seguimos estos pasos:
- Dentro del directorio de nuestro paquete, ejecutamos:
npm link
- En el proyecto donde queremos probar el paquete, ejecutamos:
npm link platzi-date
Esto crea un enlace simbólico en la carpeta node_modules
de nuestro proyecto, apuntando al paquete local que estamos desarrollando.
Prueba del paquete
Para probar nuestro paquete, creamos un archivo de prueba en nuestro proyecto principal:
// date.js
const dateFormatter = require('platzi-date');
// Obtener timestamp actual
console.log(dateFormatter.getTimeStamp());
// Obtener fecha en español (formato por defecto)
console.log(dateFormatter.getLongTime());
// Obtener fecha en inglés
console.log(dateFormatter.getLongTime('en-US'));
Al ejecutar este archivo con Node.js:
node date.js
Deberíamos ver tres salidas:
- Un número que representa el timestamp actual
- La fecha actual en formato largo en español
- La fecha actual en formato largo en inglés
Si todo funciona correctamente, significa que nuestro paquete está listo para ser publicado.
¿Qué consideraciones debemos tener antes de publicar?
Antes de publicar nuestro paquete en NPM, es importante realizar algunas verificaciones finales:
- Revisar el código: Asegurarnos de que no hay errores, tipos o elementos extraños.
- Verificar la documentación: Comprobar que el README.md es claro y contiene toda la información necesaria.
- Comprobar el package.json: Verificar que todos los campos están correctamente configurados.
- Probar exhaustivamente: Asegurarnos de que todas las funcionalidades funcionan como se espera.
Es fundamental realizar estas comprobaciones porque una vez publicado el paquete, aunque se pueden publicar nuevas versiones, la versión original quedará registrada en NPM y podría ser descargada por otros desarrolladores.
La creación y publicación de paquetes en NPM es una excelente manera de contribuir a la comunidad de desarrollo y compartir soluciones útiles. Con este proceso, has aprendido a crear un paquete simple pero funcional para el manejo de fechas. ¿Qué otro tipo de utilidades crees que podrías desarrollar y compartir con la comunidad? ¡Comparte tus ideas en los comentarios!