Skip to content

Introducción al gestor de paquetes npm

Introducción a npm

npm es el gestor de paquetes estándar para Node.js.

En septiembre de 2022 se reportaron más de 2,1 millones de paquetes en el registro de npm, lo que lo convierte en el mayor repositorio de código de un solo lenguaje en la Tierra, y puede estar seguro de que hay un paquete para (casi) todo.

Comenzó como una forma de descargar y gestionar las dependencias de los paquetes de Node.js, pero desde entonces se ha convertido en una herramienta utilizada también en JavaScript frontend.

TIP

Yarn y pnpm son alternativas a la cli de npm. También puedes consultarlos.

Paquetes

Instalando todas las dependencias

Puedes instalar todas las dependencias listadas en tu archivo package.json ejecutando:

bash
npm install

Esto instalará todo lo que el proyecto necesita, en la carpeta node_modules, creándola si aún no existe.

Instalando un solo paquete

Puedes instalar un solo paquete ejecutando:

bash
npm install <package-name>

Además, desde npm 5, este comando añade <package-name> a las dependencias del archivo package.json. Antes de la versión 5, era necesario añadir la bandera --save.

A menudo verás más banderas añadidas a este comando:

  • --save-dev (o -D) que añade el paquete a la sección devDependencies del archivo package.json.
  • --no-save que impide guardar el paquete en el archivo package.json.
  • --no-optional que impide la instalación de dependencias opcionales.
  • --save-optional que añade el paquete a la sección optionalDependencies del archivo package.json.

También se pueden usar las abreviaturas de las banderas:

  • -S: --save
  • -D: --save-dev
  • -O: --save-optional

La diferencia entre devDependencies y dependencies es que la primera contiene herramientas de desarrollo, como una biblioteca de pruebas, mientras que la segunda se incluye con la aplicación en producción.

En cuanto a las optionalDependencies, la diferencia es que el fallo de compilación de la dependencia no provocará el fallo de la instalación. Pero es responsabilidad de tu programa gestionar la falta de la dependencia. Lee más sobre dependencias opcionales.

Actualización de paquetes

La actualización también se simplifica ejecutando

bash
npm update

Esto actualizará todas las dependencias a su última versión.

También puedes especificar un solo paquete para actualizar:

bash
npm update <package-name>

Eliminación de paquetes

Para eliminar un paquete, puedes ejecutar:

bash
npm uninstall <package-name>

Control de versiones

Además de las descargas simples, npm también gestiona el control de versiones, por lo que puedes especificar cualquier versión específica de un paquete, o requerir una versión superior o inferior a la que necesitas.

Muchas veces encontrarás que una biblioteca solo es compatible con una versión principal de otra biblioteca.

O un error en la última versión de una biblioteca, aún sin corregir, está causando un problema.

Especificar una versión explícita de una biblioteca también ayuda a mantener a todos en la misma versión exacta de un paquete, para que todo el equipo ejecute la misma versión hasta que se actualice el archivo package.json.

En todos esos casos, el control de versiones ayuda mucho, y npm sigue el estándar de semantic versioning (semver).

Puedes instalar una versión específica de un paquete ejecutando

bash
npm install <package-name>@<version>

También puedes instalar la última versión de un paquete ejecutando

bash
npm install <package-name>@latest

Ejecución de tareas

El archivo package.json admite un formato para especificar tareas de línea de comandos que se pueden ejecutar usando

bash
npm run <task-name>

Por ejemplo, si tienes un archivo package.json con el siguiente contenido:

json
{
  "scripts": {
    "start": "node index.js",
    "test": "jest"
  }
}

Es muy común usar esta función para ejecutar Webpack:

json
{
  "scripts": {
    "watch": "webpack --watch --progress --colors --config webpack.conf.js",
    "dev": "webpack --progress --colors --config webpack.conf.js",
    "prod": "NODE_ENV=production webpack -p --config webpack.conf.js"
  }
}

Entonces, en lugar de escribir esos comandos largos, que son fáciles de olvidar o escribir mal, puedes ejecutar

bash
npm run watch
npm run dev
npm run prod