Si estás empezando a trabajar con JavaScript, probablemente en algún momento tendrás que utilizar Node.js y NPM. La mayoría de los proyectos de JavaScript utilizan NPM para instalar dependencias y paquetes de terceros, y para ejecutar scripts de desarrollo.
En este artículo, vamos a ver los comandos básicos de NPM, y algunos shortcuts que te pueden ayudar a ahorrar tiempo.
¿Qué es NPM?
El Gestor de paquetes de Node o Node Package Manager (NPM) fue lanzado en 2010 como un sistema de administración y distribución de paquetes para Node.js a través de internet y accesible localmente utilizando la línea de comandos del sistema. Por defecto NPM se instala junto con Node.js. En caso de no tener instalado Node.js puedes consultar el siguiente artículo: Instalar Node.js en Windows.
En la web de NPM se pueden encontrar paquetes para propósitos específicos, además de que se pueden descargar, instalar y actualizar paquetes de forma sencilla.
¿Cómo usar NPM?
Para usar NPM, debemos abrir una terminal y ejecutar el comando npm
seguido de la acción que queramos realizar. Por ejemplo, para instalar un paquete, ejecutamos el comando npm install
seguido del nombre del paquete que queremos instalar. Por ejemplo, para instalar el paquete express
ejecutamos el siguiente comando:
npm install express
Al ejecutar este comando se creará una nueva carpeta llamada node_modules
en la carpeta donde se ejecutó el comando. Dentro de esta carpeta se instalará el paquete express
y todas sus dependencias.
Paquetes globales y locales
Los paquetes que se instalan con NPM pueden ser globales o locales.
-
Paquetes locales: Son paquetes que se instalan dentro de la carpeta en la cual se ejecuta el comando
npm install
, específicamente en la carpetanode_modules
. Estos paquetes solo están disponibles para el proyecto en el que se instalaron. -
Paquetes globales: Son paquetes que se instalan fuera de la carpeta en la cual se ejecuta el comando
npm install -g
. Por lo general este tipo de paquetes se pueden ejecutar desde la linea de comandos y son reutilizables en cualquier proyecto.
package.json y package-lock.json
Cuando instalamos un paquete con NPM, se crea un archivo llamado package.json
en la carpeta donde se ejecutó el comando. Contiene información sobre el proyecto, como el nombre, la versión, las dependencias, los scripts, etc. Este archivo es muy importante, ya que es el que se utiliza para instalar las dependencias de un proyecto, así como los scripts que se ejecutan en el proyecto.
Por otra parte, el archivo package-lock.json
es un archivo generado automáticamente por NPM que contiene información detallada sobre las dependencias del proyecto y sus versiones en específico y se puede observar a manera de árbol.
La diferencia principal entre package.json
y package-lock.json
es que el primero se utiliza para definir las propiedades y dependencias del proyecto, mientras que el segundo se utiliza para almacenar información detallada sobre las versiones exactas de las dependencias y sus sub-dependencias que se instalaron en el proyecto, lo que ayuda a garantizar que el proyecto se ejecute de la misma manera en diferentes entornos.
Dependencias del proyecto y dependencias de desarrollo
Al utilizar Node.js, las dependencias de un proyecto se dividen en dos tipos:
Dependencias del proyecto: Son paquetes que son necesarios para que el proyecto funcione correctamente. Por ejemplo, si se está desarrollando un servidor web, se debe instalar el paquete
express
para poder crear un servidor web. Estos se registran en la seccióndependencies
del archivopackage.json
.Dependencias de desarrollo: Son paquetes que son necesarios para el desarrollo del proyecto, pero no son necesarios para que el proyecto funcione correctamente en un ambiente de producción. Por ejemplo, si se instala nodemon con el comando
npm install -D nodemon
, para reiniciar el servidor cada vez que se guardan cambios en el código. Estos se registran en la seccióndevDependencies
del archivopackage.json
.
Instalar paquetes por versión
Cuando instalamos un paquete con NPM, por defecto se instala la última versión disponible. Sin embargo, podemos instalar una versión específica de un paquete utilizando el comando npm install
seguido del nombre del paquete y la versión que queremos instalar. La versión del paquete es declarada en el archivo package.json
y tiene la siguiente estructura:
"dependencies":
{
"express": "^4.17.1"
}
- Para instalar la ultima versión de un paquete podemos ejecutar los siguientes comandos:
npm i express
npm i express@latest
- Si se desea instalar una versión específica de un paquete, se debe utilizar el símbolo
@
seguido de la versión que queremos instalar.
npm i express@4.18.1
- Si se desea instalar la última versión de un paquete, pero que sea menor a la versión especificada, se debe utilizar el símbolo
~
seguido de la versión que queremos instalar.
npm i express@~4.18.1
- Si se desea instalar la última versión de un paquete, pero que sea mayor a la versión especificada, se debe utilizar el símbolo
^
seguido de la versión que queremos instalar.
npm i express@^4.18.1
Desinstalar paquetes
Para desinstalar un paquete, se debe ejecutar el comando npm uninstall
seguido del nombre del paquete que queremos desinstalar.
npm uninstall <nombre_paquete>
Por ejemplo, para desinstalar el paquete express
ejecutamos el siguiente comando:
npm uninstall express
Actualizar paquetes
En ocasiones es necesario actualizar un determinado paquete una vez que el proyecto ya ha sido creado. Para actualizar todos los paquetes de un proyecto, se debe ejecutar el comando npm update
sin especificar el nombre del paquete.
npm update
En caso de solo requerir actualizar un paquete, se debe ejecutar el comando npm update
seguido del nombre del paquete que queremos actualizar.
npm update <nombre_paquete>
Por ejemplo, para actualizar el paquete express
ejecutamos el siguiente comando:
npm update express
Listar paquetes
Para listar todos los paquetes instalados en un proyecto, se debe ejecutar el comando npm list
.
npm list
Auditar paquetes
Es normal que dentro de todas las dependencias de un proyecto algunas de ellas tengan vulnerabilidades. Para auditar las dependencias de un proyecto, se debe ejecutar el comando npm audit
.
npm audit
Este comando escanea las dependencias del proyecto y muestra una lista de vulnerabilidades encontradas. Para solucionar las vulnerabilidades encontradas, se debe ejecutar el comando:
npm audit fix
De esta manera, se actualizarán las dependencias que tengan vulnerabilidades. Para ver un informe detallado de las vulnerabilidades encontradas, se debe ejecutar el comando:
npm audit fix --dry-run
Remover paquetes duplicados
Conforme aumenta el tamaño de un proyecto, el directorio node_modules
puede llegar a ser muy grande. E incluso, puede llegar a contener paquetes duplicados. Para eliminar los paquetes duplicados, se debe ejecutar el siguiente comando:
npm dedupe
Este comando realiza una busqueda dentro del árbol de dependencias y busca la manera en la que se pueden eliminar los paquetes duplicados y compartirlos entre las dependencias, de esta manera se reduce el tamaño del directorio node_modules
y la redundancia de los paquetes.
Al ser un árbol de dependencias las ramas son en su mayoria independientes, el siguiente comando intenta reorganizar esas ramas para identificar los paquetes innecesarios y eliminarlos.
npm prune
Publicar paquetes
Si se desea publicar un paquete en NPM, se debe crear una cuenta en la página de NPM. Una vez creada la cuenta, se debe ejecutar el comando npm login
para iniciar sesión en NPM.
npm login
Luego de iniciar sesión, se debe ejecutar el comando npm publish
para publicar el paquete.
npm publish
Al ejecutar este comando el paquete se publicará en NPM y estará disponible para ser instalado por otros desarrolladores. Es importante mencionar que se debe tener en consideración que el nombre del paquete debe ser único, de lo contrario se generará un error.
Para más información sobre NPM se puede consultar la documentación oficial en el siguiente enlace.