¿Qué es NPM? JavaScript para principiantes

8min

Abordamo un tema de JavaScript para principiantes para hablar de una de las herramientas más esenciales para cualquier tipo de proyecto con este lenguaje de programación. Se trata de NPM, el gestor de dependencias incorporado en NodeJS.

Índice

¿Qué es NPM (Node Package Manager)?

NPM es una herramienta fundamental en el desarrollo con JavaScript. Corresponde con las siglas de Node Package Manager y consiste en un administrador de paquetes que permite a los desarrolladores de JavaScript trabajar con lo que llamamos dependencias. Las dependencias son todas aquellas librerías que usamos al desarrollar un programa y que nos permiten evitar hacer todo el trabajo desde cero.

El trabajo con las dependencias es muy amplio e incluye muchas cuestiones, como instalar, publicar y gestionar módulos en modo general. Todo eso lo podemos hacer asistidos por NPM. 

Importancia de NPM en el desarrollo de JavaScript

NPM forma parte del ecosistema de NodeJS y lo obtenemos cuando instalamos esta plataforma de ejecución de JavaScript. Sin embargo, podemos usar NPM no sólo cuando desarrollamos con NodeJS sino también cuando desarrollamos en JavaScript para el navegador.

Gestión de paquetes y dependencias en proyectos JavaScript

Al desarrollar aplicaciones, ya sea con JavaScript o con la mayoría de los lenguajes modernos, rara vez se escribe todo el código desde cero. Por contra, los desarrolladores dependen de paquetes de código disponibles en la comunidad, que permiten realizar todo tipo de tareas comunes. Existen paquetes de software, también llamados packages, bibliotecas o librerías, para el tratamiento de innumerables cuestiones como la manipulación de fechas, la realización de solicitudes HTTP, el acceso a las bases de datos, etc.

NPM facilita la gestión de estos paquetes en las aplicaciones y no es una cuestión de calado menor, porque es habitual que unos paquetes dependan de otros y éstos a su vez de otros. De modo que, si no existiese npm podría darse el caso que usar una librería requeriría una cantidad enorme de trabajo hasta que se instalan todos sus requisitos. En cambio, NPM se encarga de rastrear qué módulos dependen de otros e instalarlos también, así como de mantenerlos actualizados cuando se requiera. Esto simplifica enormemente la tarea de mantener un proyecto actualizado, ya que no solamente tenemos que lidiar con cientos de librerías sino asegurarse que todas las dependencias estén en las versiones correctas y sean compatibles entre sí.

Pero antes de continuar aclaremos un par de conceptos básicos, porque estamos usando mucha terminología y no queremos que nadie se haga un lío.

¿Qué son los módulos?

Los módulos son básicamente archivos de código JavaScript que se pueden usar desde otros archivos. El trabajo con módulos nos facilita mantener cada cosa en su sitio y evitar tener un mismo archivo JavaScript con miles de líneas que requeriría una aplicación completa.

En el desarrollo de una aplicación o sitio web podemos tener decenas o cientos de módulos, siendo que unos son desarrollados por nosotros mismos y otros son paquetes de terceros.

¿Qué son los packages?

Los packages o paquetes son conjuntos de archivos de JavaScript que ofrecen una o varias funcionalidades y que se pueden agrupar en un proyecto independiente, que luego podremos usar desde varias aplicaciones.

Comunidad y ecosistema de paquetes de NPM

En JavaScript existe una enorme comunidad de desarrolladores que liberan miles y miles de paquetes de software que se pueden instalar mediante NPM. Además de permitir la instalación de estos paquetes, en el sitio npmjs.org podemos encontrar un repositorio de packages disponibles públicamente, realizados por cualquier desarrollador que decida aportar su software para que otras personas lo puedan usar.

Instalación y configuración de NPM

Ahora vamos a abordar una serie de prácticas básicas para el trabajo con NPM que debes de conocer, comenzando por su instalación.

Requisitos previos para usar NPM

Para usar NPM necesitas simplemente instalar Node.js. Node.js es una plataforma que permite ejecutar JavaScript en un ordenador, de manera independiente al navegador. Simplemente por el hecho de instalar Node tendrás disponible NPM en tu sistema.

Instalación de Node.js y NPM en diferentes sistemas operativos

La instalación de Node.js y NPM es bastante sencilla, aunque el procedimiento puede cambiar drásticamente dependiendo del sistema operativo que tengamos.

  • Windows: Simplemente descargamos el instalador de Node.js desde el sitio web oficial (https://nodejs.org). Este instalador ya te ofrece todo lo que necesitas.
  • MacOS: También puedes descargar un instalador, aunque habitualmente usamos Homebrew para instalar software o incluso librerías con nvm que nos permiten disponer de varias instalaciones de Node en distintas versiones.
  • Linux: En Linux, la instalación de Node.js y NPM puede variar dependiendo de la distribución que tengamos. Pero generalmente lo más común es instalar estos programas vía los gestores de paquetes del sistema operativo.

Una vez instalado podemos verificar la instalación con los siguientes comandos:

node -v

Nos debe entregar la versión de NodeJS instalada.

npm -v

Nos mostrará la versión instalada de NPM.

Prácticas habituales de uso de NPM

Inicialización de un proyecto con NPM

NPM permite crear los archivos necesarios para gestionar los desarrollos con Node o JavaScript en general, generando un archivo llamado package.json con metadatos del proyecto.

Para realizar esta inicialización, simplemente tienes que ejecutar el siguiente comando en la carpeta del proyecto:

npm init

Este comando lanzará un asistente en la consola que solicitará los datos para componer el archivo package.json.

Instalación de paquetes y dependencias con NPM

Una vez que tienes un proyecto inicializado, instalar paquetes es tan sencillo como lanzar comandos NPM. 

Para instalar cualquier paquete necesitamos conocer si nombre y lanzar un comando como el siguiente:

npm install [nombre_del_paquete]

Este comando instalará el paquete indicado y lo agregará a la lista de dependencias manejadas por tu archivo package.json.

Actualización y eliminación de paquetes con NPM

NPM también te permite actualizar y eliminar paquetes fácilmente. Usaremos los siguientes comandos:

Para actualizar los paquetes de una aplicación de manera general:

npm update

Para actualizar un paquete en particular:

npm update [nombre_del_paquete]

Para eliminar un paquete, puedes usar el siguiente comando:

npm uninstall [nombre_del_paquete]

Publicación y uso de paquetes en NPM

Además de usar los paquetes de otros desarrolladores, cualquier persona puede publicar packages en NPM, para dejarlos disponibles para otros proyectos de la comunidad en general.

Creación y publicación de un paquete en NPM

Si has creado un módulo que quieres ofrecer públicamente lo debes subir al repositorio de NPM. Para ello primero necesitas una cuenta que obtienes de manera gratuita en el sitio de npmjs.org.

Luego debes iniciar sesión con tu cuenta desde la línea de comandos:

npm login

Posteriormente puedes publicar tu paquete con el comando:

npm publish

Ten en cuenta que debes haber inicializado previamente el package con el comando «init» comentado anteriormente y que debes haber completado toda la información de este paquete en su package.json, incluida la versión del package que estás publicando.

Uso de paquetes publicados en proyectos JavaScript

Una vez que un paquete ha sido publicado en NPM, otros desarrolladores pueden instalarlo y usarlo en sus proyectos, con los comandos de instalación que ya hemos comentado.

Herramientas y características avanzadas de NPM

Además de la gestión de las dependencias, podemos usar NPM para una cantidad enorme de tareas administrativas y de automatización. Vamos a ver algunas.

Scripts personalizados en el archivo package.json

El archivo package.json tiene una sección en la que puedes definir scripts personalizados que realizarán tareas comunes en tu proyecto. Por ejemplo, podrías tener un script que inicie tu aplicación, otro que ejecute tus pruebas, o arranque un servidor de desarrollo, por poner varios ejemplos.

La sección en concreto se define con la propiedad «scripts» del package.json.

'scripts': {
    'start': 'wds --node-resolve --preserve-symlinks --watch --open demos/',
    'build': 'vite build'
  },

Estos scripts luego se pueden ejecutar con el comando npm run seguido con el nombre del script, por ejemplo:

npm run build

Administración de versiones y control de dependencias

NPM tiene soporte integrado para el control de versiones semántico (SemVer, Semantic Versioning). Gracias a este soporte semántico podemos dejar implícito qué dependencias son compatibles con una versión de tu package.

NPM en entornos de producción y desarrollo

Cuando instalamos software mediante NPM podemos distinguir entre dependencias de desarrollo y dependencias de producción. 

  • Las dependencias de desarrollo son aquellas que sólo se necesitan durante la etapa de desarrollo. Por ejemplo el servidor de desarrollo que levantamos para ver el proyecto en funcionamiento.
  • Dependencias de producción se refiere a todas aquellas que se necesitan para ejecutar la aplicación en el entorno de servidor. 

Al instalar dependencias NPM entiende siempre que son dependencias de producción. Sin embargo, podemos indicar que solo las necesitamos para desarrollo con el flag –save-dev.

install vite --save-dev

Y con esto terminamos el conocimiento de JavaScript para principiantes que necesitas para trabajar con NPM. Una herramienta esencial que necesitarás en todo tipo de proyectos JavaScript, tanto frontend como backend.

Fernán García de Zúñiga

Productos relacionados: