Publicar tu propio paquete en NPM es una de las formas más directas de compartir código reutilizable con la comunidad de desarrolladores. Aquí se recorre paso a paso la creación de un proyecto llamado random-messages, que al instalarse de forma global permite ejecutar un comando en la terminal y recibir un mensaje aleatorio en la consola.
¿Cómo se inicializa un proyecto de NPM correctamente?
Todo comienza en la terminal. Antes de crear cualquier archivo, conviene verificar que estás en la ruta correcta con el comando pwd [0:22]. Una vez confirmado, se crea la carpeta del proyecto y se accede a ella:
bash
mkdir random-messages
cd random-messages
El siguiente paso, como buena práctica, es inicializar un repositorio de Git con git init [0:42]. Esto garantiza control de versiones desde el primer momento, y más adelante puedes conectarlo a GitHub, GitLab o Bitbucket.
Después se ejecuta npm init [1:00], que genera el archivo package.json con la configuración del proyecto. Durante este proceso se definen:
- Nombre del paquete: random-messages.
- Versión: 1.0.0, la primera versión.
- Descripción: un random de mensajes.
- Entry point:
source/index.js, porque el código vivirá dentro de una carpeta source.
- Keywords: javascript, node, npm.
- Licencia: MIT.
El autor se completa automáticamente si previamente lo configuraste en tu máquina [1:50].
¿Cómo se construye la lógica del paquete en JavaScript?
Dentro del editor de código se crea la carpeta source y el archivo index.js [2:10]. La lógica del paquete es sencilla pero ilustrativa: un arreglo de strings y una función que devuelve uno de ellos al azar.
javascript
const messages = ['Ana', 'Nicolai', 'Jessica', 'Diego', 'Laura'];
const randomMsg = () => {
const message = messages[Math.floor(Math.random() * messages.length)];
console.log(message);
};
module.exports = { randomMsg };
Math.floor redondea hacia abajo el resultado de Math.random, que genera un número decimal entre 0 y 1 [3:30]. Al multiplicarlo por messages.length se obtiene un índice válido dentro del arreglo. Así, cada ejecución retorna un elemento diferente de la lista.
La última línea usa module.exports [4:10] para exponer la función randomMsg como un módulo de Node.js, lo que permite importarla desde otros archivos.
¿Qué configuración necesita un paquete para instalarse de forma global?
Para que el paquete funcione como comando de terminal, se necesita una carpeta llamada bin con un archivo global.js [4:25]. Este archivo contiene la instrucción que indica al sistema operativo cómo ejecutarlo:
javascript
#!/usr/bin/env node
const random = require('../source/index');
random.randomMsg();
La primera línea, conocida como shebang (#!/usr/bin/env node), le dice al sistema que debe usar Node.js para interpretar el archivo [4:35]. Luego se importa el módulo creado y se invoca la función.
Finalmente, en el archivo package.json se añaden dos configuraciones clave [5:05]:
{
"bin": {
"random-msg": "./bin/global.js"
},
"preferGlobal": true
}
- La propiedad bin registra el nombre del comando que los usuarios escribirán en la terminal (
random-msg) y lo vincula al archivo que debe ejecutarse.
- La propiedad preferGlobal establecida en
true indica que este paquete está diseñado para instalación global, no como dependencia local de otro proyecto.
Con esta estructura lista, el paquete queda preparado para ser publicado en el registro de NPM y probado en un entorno local. Si ya has seguido estos pasos, comparte en los comentarios qué tipo de paquete te gustaría crear y publicar.