Node.js es un entorno de ejecución de JavaScript de código abierto y multiplataforma. En los últimos años, se ha convertido en una opción popular para el desarrollo web back-end debido a su rápido rendimiento de Entrada/Salida (E/S) y su inigualable JavaScript syntax. Además, su naturaleza adaptativa permite una rápida personalización, lo que hace que esta tecnología de servidor destaque frente a sus competidores.
Node.js Package Manager — Una visión general
Node.js Package Manager o npm es el gestor de paquetes predeterminado para JavaScript. Npm se utiliza a menudo para instalar scripts de proyectos y operar módulos externos en un Node.js proyecto. Además, realiza un seguimiento de los módulos instalados en un proyecto utilizando el package.json archivo, que se encuentra en el directorio del proyecto. Npm almacena y registra la siguiente información:
- Módulos requeridos para un proyecto y sus versiones instaladas, si las hay.
- Descripción de metadatos de un proyecto que incluye detalles del autor y la licencia, por nombrar algunos.
- Scripts ejecutables para automatizar tareas relacionadas con el proyecto o de orientación a objetivos.
En este tutorial, le guiaremos a través de los pasos para usar módulos de Node.js con npm y package.json.
¡Empecemos!
Requisitos previos
Para seguir este tutorial, necesitará lo siguiente:
- Node.js debe estar instalado en su sistema.
- Siga los pasos para instalar Node.js en Ubuntu 18.04
-
La última versión de Ubuntu instalada en su sistema.
Paso 1: Crear un archivo package.json
Comencemos nuestro tutorial tomando como ejemplo un proyecto ficticio que utiliza el módulo locator de Node.js. El proyecto tiene como objetivo recopilar la dirección IP del usuario y compartir el resultado como el país de origen del usuario. Dado que nos centramos en comprender el uso de los módulos de Node.js con npm, no es necesario escribir los módulos manualmente. En su lugar, utilizaremos los paquetes preinstalados y personalizables en nuestro proyecto.
JSON o JavaScript Object Notation es un formato estándar utilizado para compartir y transmitir datos. Inicialmente, crearemos un archivo JSON que almacenará y gestionará las dependencias de software. Sin embargo, crear un package.json manualmente es laborioso y requiere mucho tiempo. Para simplificar, utilizaremos el comando init para crear el archivo package.json en lugar de esforzarnos en escribir bloques de código adicionales para escribir nuestro JSON desde cero.
-
init comando
Primero, creemos una nueva carpeta usando el comando mkdir y nombrémosla locator:
|
1 |
mkdir locator |
A continuación, use el comando cd para moverse a la carpeta recién creada:
|
1 |
cd locator |
Luego, introduzca npm para inicializar el símbolo del sistema interactivo:
|
1 |
npm init |
Después de eso, verá el resultado:

1. name
Se le dirigirá al name de su nuevo proyecto; la carpeta actual. Verá los valores predeterminados entre paréntesis (). Para mantener este tutorial simple y fácil de entender, continuaremos con las opciones predeterminadas. Presione ENTER para aceptar y continuar.
2. version
El siguiente valor es el nombre de la version que es un requisito clave si comparte su proyecto en el repositorio de npm de paquetes.
|
Nota: Los paquetes de Node.js siguen la guía de Semantic Versioning (semver). Primer número: El MAJOR versión y cambia solo cuando cambia la API. Segundo número: La MINOR versión que cambia cuando se añaden características adicionales. Último número: La PATCH versión que cambia cuando se resuelve un error o fallo. |
3. description
La description es una cadena informativa que describe el proceso de trabajo del módulo Node.js. En nuestra demostración, el proyecto locator obtendrá la dirección IP del usuario y devolverá el país de origen.
|
Nota: En su mayoría, los módulos tienen un archivo index.js como punto de entrada. Esta es también la propiedad main de package.json, el punto de entrada para los módulos npm. Sin embargo, si no se encuentra package.json, Node.js cargará index.js automáticamente. |
4. test comando
Es un script o comando ejecutable para ejecutar las pruebas de su proyecto. Como las pruebas están fuera del alcance de nuestro tutorial, omitámoslo y presione ENTER.
5. init comando
El comando init solicitará el GitHub Repository del proyecto. Nuevamente, omitamos esta parte y continuemos.
6. keywords
Palabras clave son una matriz de cadenas utilizadas para buscar un repositorio. Se recomienda mantener las palabras clave precisas y relevantes para su proyecto para que puedan ser rastreadas sin problemas.
Enumere estas palabras clave como cadenas y sepárelas con comas. En nuestro proyecto, escriba ip, country, latitude, y longitude en el símbolo del sistema y verá que se incluyen como palabras clave en package.json.
7. author
Trate el campo author como comentarios y una forma de interactuar con sus usuarios. Por ejemplo, si los usuarios detectan un error en su módulo, pueden usar este campo para notificarle y solucionar el error.
-
Formato: "Nombre \<Correo electrónico\> (Sitio web)".
-
Demostración: "Paul\<paul@your_domain\> (https://your_domain)"
-
Agregar datos de correo electrónico y sitio web es opcional. Sin embargo, puede especificar un autor válido y agregar sus datos de contacto como un author. Confirme los detalles y presione ENTER.
8. license
El campo license ilustra los términos y condiciones legales que los usuarios deben conocer al usar su módulo. Como Node.js los módulos son de código abierto, npm lo configura como ISC-license automáticamente.
Navegue a la página de licencias de código abierto y elija la Open Source Initiative que mejor se adapte a sus necesidades. Escriba UNLICENSED en el símbolo del sistema si no necesita una licencia para su repositorio. En nuestro tutorial, utilizaremos la licencia ISC predeterminada. Presione ENTER para completar este proceso.
El comando init creará el archivo package.json y mostrará el resultado:

A continuación, presione ENTER para continuar y crear el archivo package.json . Nuestro archivo JSON mantendrá un registro de todos los módulos y paquetes que instalaremos en nuestro proyecto.
En el siguiente paso, instalaremos las dependencias y los módulos de Node.js.
Step 2: Install Dependencies and Modules
Crear librerías externas personalizadas requiere mucho tiempo y un gran esfuerzo. Alternativamente, la forma más eficaz es instalar dependencias predefinidas y librerías externas. En nuestro tutorial, utilizaremos la librería HTTP para permitir que nuestro módulo localizador de demostración realice una solicitud de API externa para recopilar datos geográficos.
En esta guía, utilizaremos la librería axios para realizar solicitudes HTTP. Primero, vamos a instalar axios:
|
1 |
npm install axios --save |
Comience instalando el paquete npm seguido de enumerarlos mediante espacios separados. Además, incluya la etiqueta --save para asegurarse de que el proyecto se guarde como una dependencia del proyecto.
Verá el resultado:

Abra el archivo package.json usando nano o cualquier editor de texto de su elección:
|
1 |
nano package.json |
Observe la propiedad recién agregada resaltada en la parte inferior del bloque de código:

-
Descargar dependencias de desarrollo
Las dependencias de desarrollo son paquetes que se utilizan en el desarrollo del proyecto y no tienen utilidad en la producción o el mantenimiento del mismo. Aunque estas dependencias puedan parecer ineficaces en las áreas de producción, desempeñan un papel importante en la escritura y reescritura de código.
Al igual que los linters de código, las dependencias de desarrollo desempeñan un papel vital en el desarrollo de software. En su mayoría, los desarrolladores utilizan code linters para mantener la uniformidad y la coherencia en el estilo durante el desarrollo del proyecto, lo que de otro modo sería inútil en producción.
Instalemos un linter como una dependencia de desarrollo para su proyecto. Además, use la bandera --save-dev para guardar eslint como una dependencia requerida para el desarrollo:
|
1 |
npm i eslint@6.0.0 --save-dev |
Agregamos @6.0.0 a nuestra dependencia para que cuando actualicemos los módulos, se etiqueten con una versión. El símbolo @ notificará a npm para buscar una etiqueta específica que desee instalar. Ahora, vuelva a abrir el archivo package.json :
|
1 |
nano package.json |
Verá el resultado:

- Archivos autogenerados: node_modules y package-lock.json
Al principio, al instalar un paquete en el proyecto de Node.js, los archivos package.json y package-lock.json se crean automáticamente. Confirme estos archivos en el directorio de trabajo:
![]()
Dado que la mayoría de las dependencias instaladas se almacenan en node_modules carpeta, es aconsejable no hacer commit de esta carpeta en su repositorio de control de versiones. Con un aumento en el número de dependencias instaladas, el tamaño de la node_modules también aumenta.
Por el contrario, el package-lock.json archivo mantiene un registro de las versiones exactas instaladas, por lo que no es necesario incluir node_modules explícitamente. A diferencia de la node_modules carpeta, puede hacer commit de este archivo en su repositorio de control de versiones porque ofrece una representación detallada de todas sus dependencias junto con sus versiones.
- Instalar usando package.json
Los package.json y package-lock.json archivos le permiten configurar las mismas dependencias del proyecto antes de iniciar el desarrollo del proyecto. Navegue por su árbol de directorios y cree una nueva carpeta en el mismo nivel de directorio que locator. Nombre la nueva carpeta como cloned_locator:
|
1 2 |
cd .. mkdir cloned_locator |
A continuación, muévase a la carpeta cloned_locator:
|
1 |
cd cloned_locator |
Importe los archivos package.json y package-lock.json desde locator a cloned_locator:
|
1 |
cp ../locator/package.json ../locator/package-lock.json . |
El . significa la carpeta actual. Instale los módulos requeridos usando el siguiente comando:
|
1 |
npm i |
Inicialmente, npm comprobará el archivo package-lock.json para instalar los módulos. Si el archivo lock no está disponible, lee el archivo package.json para determinar las instalaciones.
En general, instalar desde package-lock.json es sencillo porque el archivo lock contiene la versión exacta de los módulos y sus dependencias. Eso significa que cuando realiza la instalación utilizando el package.json, npm ahorrará el tiempo extra requerido para encontrar una versión compatible y estable.
Ignore las dependencias de desarrollo agregando la etiqueta --production :
|
1 |
npm i --production |
Después de eso, regrese a locator:
|
1 |
cd ../locator |
- Instalaciones globales
Hasta ahora, hemos instalado módulos de npm localmente. Sin embargo, también tiene la alternativa de instalar paquetes de forma global y usarlos a través de comandos de shell o CLI. Por ejemplo, puede navegar por el proyecto locator actual utilizando la biblioteca Hexo y administrar su sitio web estático. Use el siguiente comando con la etiqueta -g para instalar la CLI de Hexo de forma global:
|
1 |
npm i hexo-cli -g |
|
Nota: Si obtiene un error al instalar paquetes de forma global, pruebe este comando sudo npm i hexo-cli -g con credenciales de root. |
Use el siguiente comando para verificar que el paquete se instaló correctamente:
|
1 |
hexo --version |
Verá la salida:

Paso 3: Administrar y actualizar módulos
Un gestor de paquetes tiene más funciones que la simple instalación de módulos de Node.js. Hay muchas opciones de personalización donde puede listar, actualizar, desinstalar o incluso agregar una capa de seguridad según su conveniencia.
En esta sección, aprenderemos cómo:
-
Listar módulos
-
Actualizar módulos
-
Desinstalar módulos
-
Auditar módulos
Analicemos cada uno en detalle:
-
Listar módulos
Listar módulos, como su nombre indica, le dará los detalles de todos los módulos instalados en el proyecto. En lugar de leer el archivo package.json , puede usar el comando ls o list para conocer los módulos de su proyecto en detalle:
|
1 |
npm ls |
Verá la salida:

Por defecto, el comando ls lista todo el árbol de dependencias que incluye las dependencias del proyecto y el módulo del que depende. Sin embargo, también puede obtener una vista general y apuntar explícitamente a un módulo específico. Use el siguiente comando para verificar los módulos que ha instalado sin sus dependencias:
|
1 |
npm ls --depth 0 |
Verá la salida:

-
Actualizar módulos
Siempre es aconsejable mantener actualizado su módulo de npm para que no experimente fallos de software o conflictos. Use el siguiente comando para verificar si es necesario realizar una actualización:
|
1 |
npm outdated |
Verá la salida:

Comprendamos cada término en detalle:
- Package: Lista el Package actual instalado en su proyecto.
- Current: Muestra la versión Current del paquete.
- Wanted: Muestra el npm versión que mejor se adapta al requisito de versión en package.json.
- Latest: Muestra la última npm publicada que debes actualizar si es necesario.
- Location: El paquete Location en el árbol de dependencias.
Como se sugirió, podemos actualizar nuestro npm a una versión estable. Usa el siguiente comando para actualizar tu paquete actual:
|
1 |
npm up eslint |
Verás la salida:

En lugar de actualizarlos uno por uno, también puedes actualizar todos los módulos a la vez usando el up comando:
|
1 |
npm up |
-
Desinstalar módulos
Muchas veces, una dependencia puede no mostrar el resultado esperado y necesitas crear una dependencia personalizada. En tales escenarios, tienes la opción de desinstalar dependencias de tus archivos package.json y package-lock.json . Supongamos que tienes axios como dependencia y no proporciona un resultado satisfactorio. Sin duda, eliminarás este repositorio de tu proyecto. Usa el uninstall o un comando para eliminar axios:
|
1 |
npm un axios |
Verás la salida:

Aunque el uninstall comando eliminó la dependencia, no recibimos ninguna notificación de su eliminación. Listemos las dependencias para ver cuántas dependencias tenemos ahora:
|
1 |
npm ls --depth 0 |
Verás la salida sin la dependencia axios presente en la lista:

-
Auditar módulos
Si las dependencias instaladas en tu proyecto son propensas a alguna amenaza potencial de seguridad, puedes detectarlas. Al principio, debes instalar una versión desactualizada del módulo request para ver cómo funciona el módulo de auditoría:
|
1 |
npm i request@2.60.0 |
Verás la salida que te pide corregir las amenazas o vulnerabilidades:

Para ampliar los detalles sobre vulnerabilidades y amenazas, usa el audit comando:
|
1 |
npm audit |
Verás un informe de seguridad detallado:

Para resolver estas vulnerabilidades, usa el fix comando:
|
1 |
npm audit fix |
Verás la salida:

Es posible que hayas notado que se corrigieron dos de las nueve vulnerabilidades. Sin embargo, las siete vulnerabilidades restantes persisten en tus dependencias porque el audit fix no resuelve todos los problemas. Para solucionar este problema, es posible que debas actualizar tu dependencia a una versión superior utilizando una API diferente. Ten cuidado al actualizar porque existe la probabilidad de que rompas el código que está más arriba en el árbol de dependencias. Usa el siguiente comando para confirmar que las vulnerabilidades han desaparecido:
|
1 |
npm audit fix --force |
Ten cuidado al usar una API diferente para resolver amenazas de vulnerabilidad porque, si no estás seguro, podría romper la funcionalidad del código.
Conclusión
En conclusión, demostramos cómo usar Node.js módulos con npm y package.json. Además, repasamos los métodos para listar, actualizar, administrar, auditar y desinstalar nuestras dependencias de paquetes. Como próximo desafío, te animamos a utilizar los conceptos analizados en esta guía y a experimentar instalando y probando paquetes por ti mismo. También puedes intentar crear aplicaciones Node.js y configurar dependencias para elevar tu aprendizaje.
Además, hay muchos otros materiales de aprendizaje sobre temas de Node.js y JavaScript que puedes encontrar en nuestro blog:
- Cómo instalar Node.js en CentOS 8: una guía completa
- Cómo conectar PostgreSQL con aplicaciones Node.js: un tutorial
- Uso del cliente HTTP Axios en una aplicación React: un tutorial
- Cómo implementar una aplicación Node.js (Express.js) con Docker en Ubuntu 20.04
¡Feliz programación!
Comentarios
Aún no hay comentarios. Sea el primero.