Publicación de un módulo Node.js en NPM

En este artículo, escribiremos un módulo de nodo simple y lo publicaremos en NPM para que lo usen otros desarrolladores.

Introducción

NPM significa Node Package Manager y hace referencia al repositorio de proyectos en línea o a la herramienta Command Line Interface (CLI) utilizada para interactuar con el repositorio en línea.

Actualmente, NPM es el registro de software más grande del mundo con más de 1,4 millones de paquetes de código. Por ejemplo, si quisiera usar Node.js para enviar correos electrónicos, podría hacer una búsqueda rápida en su repositorio y encontrar un módulo como Nodemailer, que puede ahorrarte mucho tiempo.

Es posible que desee compartir una herramienta que haya creado con la comunidad, que simplifica algunas tareas repetitivas. En este artículo, veremos cómo publicar un módulo Node.js en NPM.

Primeros pasos con NPM

Para publicar un módulo en NPM, necesitamos tener una cuenta de NPM. Si no tienes uno, puedes crearlo aquí.

Cuando instala Node.js, la herramienta npm también se instala automáticamente.

Para comprobar si npm se ha instalado correctamente, puede comprobar cuál es la versión instalada actualmente ejecutando:

1
$ npm -v

Una vez que nos hayamos asegurado de que tenemos npm instalado, podemos iniciar sesión:

1
$ npm login

La herramienta nos solicitará nuestra identificación, correo electrónico y contraseña creados al registrarse.

Nota: No necesita tener una cuenta para usar NPM, pero para publicar un módulo, necesitará una, ya que está vinculada a usted como autor.

Creación de un paquete

Vamos a crear un directorio para nuestro proyecto y pasar a él:

1
2
$ mkdir publish-to-npm
$ cd publish-to-npm

A continuación, inicializaremos el proyecto:

1
$ npm init 

Luego, el comando le hará varias preguntas que, cuando se completan, producen un archivo package.json:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
{
  "name": "publish-to-npm",
  "version": "1.0.0",
  "description": "\"Sample module for publishing\"",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "[correo electrónico protegido]",
  "license": "ISC"
}

El punto de entrada principal, por defecto, es index.js, por lo que queremos crear ese archivo y agregarle algo.

Si usó el indicador -y junto con el comando init, estos se habrían configurado en sus valores predeterminados.

Adición de dependencias

Agreguemos algo de código a nuestro archivo index.js y agreguemos una dependencia, como otro módulo NPM para que lo use.

Primero, instalaremos una dependencia:

1
$ npm install node-fetch --save

Luego, lo importaremos a nuestro archivo index.js y agregaremos algo de lógica:

1
2
3
4
5
const fetch = require('node-fetch');

fetch('https://google.com')
    .then(res => res.text())
    .then(text => console.log(text))

Para verificar que esto funciona, podemos ejecutar:

1
$ node index.js

Y la salida es:

1
2
3
4
5
6
<!doctype html>
<html itemscope="" itemtype="http://schema.org/WebPage" lang="en-RS">
    <head>
        <meta charset="UTF-8">
        <meta content="origin" name="referrer">
        <!-- Rest of the page -->

Al revisar el archivo package.json ahora, podemos ver node-fetch en nuestras dependencias:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
{
  "name": "publish-to-npm",
  "version": "1.0.0",
  "description": "\"Sample module for publishing\"",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "[correo electrónico protegido]",
  "license": "ISC"
  "dependencies": {
    "node-fetch": "2.6.1"
  }
}

Nota: El indicador --save le dice a npm que actualice el proyecto con el módulo como una dependencia. Esto se eliminó en las versiones más nuevas y el módulo se agregará a la lista de dependencias incluso sin el indicador --save, aunque, para versiones anteriores, tendrá que usarlo.

Publicación en NPM

Ahora, podemos publicar el módulo en NPM a través del comando publish:

1
$ npm publish

Si obtiene algún error, lo más probable es que se deba a una colisión de nombres. es decir, ya existe un paquete con el mismo nombre en npm. Tenemos que cambiar el nombre de nuestro proyecto a algo único.

Puede buscar nombres de paquetes existentes a través de la barra de búsqueda en la página de inicio.

Después de encontrar un nombre único, debe cambiar el nombre del paquete en nuestro archivo package.json. En aras de la coherencia, también se recomienda actualizar el nombre de la carpeta para que coincida con el nombre del paquete.

Si no puede encontrar un nombre único, debe consultar [paquetes con alcance] (https://docs.npmjs.com/about-scopes). Básicamente, esto le brinda su propio espacio de nombres en NPM, por lo que puede nombrar sus paquetes como desee.

En general, se recomienda que, si planea hacer público un módulo, evite usar el mismo nombre que otro paquete para evitar confusiones innecesarias. Sin embargo, es muy práctico para uso personal.

Esta es una de esas configuraciones que evitamos cambiar usando el indicador -y. Si desea crear un módulo con alcance, deberá inicializar su proyecto con:

1
$ npm init [correo electrónico protegido]

Conclusión

En este artículo, escribimos una aplicación simple y la publicamos en NPM como un módulo público para que otros desarrolladores la usen a su conveniencia.

Es posible que se encuentre con una situación en el futuro en la que no encuentre un módulo fácilmente disponible para resolver su problema particular. Puede escribir la solución usted mismo y cargarla en NPM, y tal vez ayudar a otros desarrolladores con el mismo problema.