Entre muchos, uno de los principales motivos que han impulsado la popularidad de NodeJS como entorno de desarrollo, es sin duda alguna la facilidad que tiene para instalar paquetes de terceros usando NPM, que son las iniciales de Node Package Manager, en pocas palabras podemos definirlo como un administrador de paquetes que permite mediante unos pocos comando gestionar la instalación, actualización y desinstalación de paquetes de forma rápida y segura.
¿Qué es NPM?
Hoy en día son pocos los proyectos que arrancan de cero, en la actualidad aparte de implementar algún framework que brinde una estructura básica al proyecto y resuelva algunas cuestiones generales a todo proyecto, también se busca mediante extensiones o librerías de terceros, resolver problemas más específicos que los frameworks no cubren, como por ejemplo, la manera de agilizar el tiempo de desarrollo y no tener que reinventar la rueda en cada proyecto.
Justamente en este punto es donde entra NPM y su importancia, por tanto, NPM es una herramienta que le permite a los desarrolladores el poder de manera sencilla y eficiente buscar, instalar y actualizar todas las dependencias de un proyecto sin romper nada, es decir, las librerías externas desarrolladas por terceros que sus proyectos necesitan como forma de reducir el tiempo y por tanto, costos, además aumentar la seguridad al utilizar paquetes ampliamente probados.
Lo hace a través de un repositorio en línea (https://www.npmjs.com/) donde los desarrolladores pueden publicar y compartir sus paquetes de software con la comunidad.
Actualmente, existen varios manejadores de paquetes, sin embargo, NPM es el administrador por defecto de NodeJS a tal punto que ya viene incorporado en él.
Ventajas de utilizar NPM
Utilizar NPM brinda al desarrollador JavaScript y Node.js un sin fin de ventajas:
- Gestión de Dependencias: Ofrece una instalación de sencilla de paquetes, permite controlar las versiones de los paquetes a usar, debido a que NPM permite especificar las versiones exactas o rangos de versiones para cada dependencia en el archivo package.json, garantizando que tu proyecto use versiones compatibles y estables, evita que si el mantenedor del paquete introdujo cambios en nuevas versiones, estas se instalen automáticamente y afecten al proyecto, solo se actualizara a nuevas versiones del paquete, cuando el desarrollador decida cambiar la versión en el package.json.
- Automatización de dependencias: De la mano del punto anterior, al ejecutar npm install, instalará todas las dependencias necesarias que se descargan y configuran automáticamente en sus versiones definidas en el archivo package.json, lo que facilita los deploys (despliegues en producción) y el escalar la aplicación en varios servidores.
- Amplia variedad de paquetes: NPM cuenta con el repositorio de paquetes de software más grande del mundo en cuanto a números de paquetes, lo que significa que probablemente haya un paquete disponible para casi cualquier funcionalidad que se necesite, además dependiendo del paquete también cuentan actualizaciones frecuentes, debido a que muchos son de código abierto, también permite que la amplia comunidad de desarrolladores garantizan que los paquetes se actualicen y mantengan regularmente.
- Facilidad Automatización: NPM permite definir scripts para ampliar funciones y automatizar tareas, se puede definir scripts en el package.json para automatizar tareas comunes como pruebas, compilación, despliegue, etc.
- Publicación de Paquetes: NPM no solo permite descargar paquetes de terceros, también brinda la posibilidad de publicar y distribuir tus propios paquetes, no solo permitiendo que otros desarrolladores los usen e incluso contribuyan con mejoras, sino que facilita tus despliegues de tus proyectos y la actualización en los proyectos donde ya lo uses, si en cambio no quieres que otros accedan también permite configurar el acceso a tus paquetes, tanto públicos como privados, facilitando el control sobre quién puede usar o contribuir a ellos.
- Auditoría y Seguridad: El utilizar paquetes que son ampliamente usados por la comunidad brindan una cierta seguridad en cuanto a esos paquetes porque han sido ampliamente probados, por otro lado, NPM cuenta con comandos para auditoría que permite realizar un análisis de seguridad en las dependencias de tu proyecto, identificando y sugiriendo correcciones para vulnerabilidades conocidas, también se puede automatizar la corrección de vulnerabilidades encontradas en las dependencias.
- Modularidad y Reutilización: Permite la creación de código de forma modular y para ser reutilizable, lo que sin dudas puede reducir el tiempo y esfuerzo necesarios para desarrollar nuevas funcionalidades, partir de código ya existente en el repositorio, sin reinventar la rueda cada vez, además facilita la gestión de dependencias compartidas entre varios proyectos, asegurando siempre la consistencia y compatibilidad.
- Scripts Adicionales: Aparte de las opciones de automatización incluidas ya en NPM, adicionalmente es posible usar herramientas y bibliotecas de terceros disponibles (en NPM) que pueden mejorar el flujo de trabajo, como por ejemplo linters, o herramientas de construcción y frameworks de testing, todas herramientas que pueden simplificar y automatizar tareas repetitivas en el desarrollo.
- Comunidad, Soporte y Colaboración: Existe una gran comunidad de programadores alrededor de los paquetes del repositorio de NPM, lo cual significa que hay mucho soporte disponible, sea tanto a través de la documentación oficial, como en foros, en comunidades en línea y comunidad de código abierto en general.
- Actualizaciones: Al ser la mayor parte software libre y abierto a colaboración, permite que la comunidad detrás de los paquetes incluidos en el repositorio continúen evolucionando y mejorando con el tiempo, al mismo tiempo NPM garantiza que en cada proyecto solo se actualicen los paquetes a las versiones que sean soportadas por el propio proyecto y solo suba de versión cuando se quiera hacer esto explícitamente y no de forma automática.
Como resumen podemos decir que NPM ofrece una gestión completa y eficiente de todas las dependencias de un proyecto, ofreciendo desde los repositorios una colección de paquetes, herramientas para automatización, auditoría de seguridad y una fuerte integración con Node.js, todo con el respaldo de una comunidad, esto hace que NPM sea una herramienta popular entre desarrolladores de JavaScript y Node.js.
Instalación
Como comentamos previamente, para instalar NPM hay que instalar NodeJS y la mejor manera de hacerlo es seguir nuestra guía sobre Cómo instalar y usar NVM (Node Version Manager), una completa guía paso a paso, para instalar uno o más versiones de NodeJS según se necesite, por tanto, en el presente artículos nos enfocaremos en cómo usar NPM para instalar paquetes.
Guía de uso de NPM
Veamos a continuación cuáles son los comandos básicos para utilizar esta herramienta y sacarle todo el jugo.
Inicialización de un proyecto
npm init | Inicia un nuevo proyecto y crea un package.json. |
npm init -y | Inicia un nuevo proyecto con todas las configuraciones por defecto. |
Instalación de paquetes
npm install o npm i | Instala un paquete y lo añade a dependencies en package.json. |
npm install –save-dev npm i -D: | Instala un paquete y lo añade a devDependencies. |
npm install o npm i | Instala todos los paquetes listados en dependencies y devDependencies del package.json. |
npm install -g | _ |
Eliminación de paquetes
npm uninstall npm un | Desinstala un paquete y lo elimina de dependencies o devDependencies. |
Actualización de paquetes
npm update | Actualiza un paquete a la última versión disponible respetando el rango de versiones admitidas especificadas en package.json. |
npm outdated | Muestra una lista de paquetes desactualizados, es decir que tienen paquetes disponibles versiones más nuevas. |
Gestión de versiones
npm version <major|minor|patch> | Incrementa la versión del proyecto según la especificación dada, por ejemplo major, minor o patch, ejemplo: |
npm publish | Publica un paquete en el registro NPM. |
npm unpublish <nombre_paquete>@<versión> | Despublica una versión específica de un paquete. |
Scripts de NPM
npm run <script> | Ejecuta un script definido en package.json. |
npm test | Ejecuta el script test definido en package.json. |
npm start | Ejecuta el script start definido en package.json. |
Cache
npm cache clean –force | Limpia la caché. |
npm cache verify | Verifica la integridad de la caché. |
Configuración
npm config set <key> <value> | Establece una configuración de NPM. |
npm config get <key> | Obtiene el valor de una configuración de NPM. |
npm config list | Muestra todas las configuraciones actuales de NPM. |
Auditoría de seguridad
npm audit | Permite realizar una auditoría de seguridad de los paquetes instalados. |
npm audit fix | Permite o al menos intenta arreglar automáticamente las vulnerabilidades encontradas. |
Vinculación de paquetes locales
npm link | Crea un enlace simbólico global a un paquete local. |
npm link <nombre_paquete> | Vincula un paquete local de forma global a un proyecto. |
Otros comandos útiles
npm ls | Lista todos los paquetes instalados y sus dependencias. |
npm info <nombre_paquete> | Muestra información detallada sobre un paquete. |
npm whoami | Muestra el nombre de usuario con el que estás logueado en NPM. |
Estos son algunos de los comandos más útiles y frecuentemente utilizados en NPM. Para una lista completa y más detalles, siempre puedes consultar la documentación oficial de npm.
Conclusión
Hoy en día la mayoría de los proyectos no comienzan desde cero, sino que se construyen a partir de frameworks para brindar una estructura básica y se utilizan paquetes y librerías de terceros para agregar funciones adicionales al framework y resolver problemas mucho más específicos, lo que agiliza todo el proceso de desarrollo y evita la necesidad de reinventar la rueda como mencionamos antes, donde si bien hoy día existen muchos manejadores de paquetes aparte de NPM, sin embargo, este sigue siendo el preferido de la mayoría de los desarrolladores gracias a su confiabilidad.
Node.JS ha ganado popularidad en gran medida debido a NPM y a la facilidad con la que permite gestionar paquetes, simplificando la instalación, la actualización y desinstalación de paquetes, proporcionando una forma rápida y sobre todo segura de manejar todas las dependencias de un proyecto.