npm es un gestor de paquetes para el lenguaje de programación JavaScript mantenido por npm, Inc., una subsidiaria de GitHub . npm es el gestor de paquetes predeterminado para el entorno de ejecución de JavaScript Node.js y se incluye como una característica recomendada en el instalador de Node.js. [ 4 ]
Consta de un cliente de línea de comandos, también llamado npm, y una base de datos en línea de paquetes públicos y privados de pago, denominada registro npm. Se accede al registro a través del cliente, y los paquetes disponibles se pueden explorar y buscar en el sitio web de npm. El gestor de paquetes y el registro son administrados por npm, Inc.
Aunque comúnmente se entiende que "npm" es una abreviatura de "Node Package Manager", oficialmente es una abreviatura recursiva retrógrada de "npm no es un acrónimo". [ 5 ]
Características
npm puede gestionar paquetes que son dependencias locales de un proyecto en particular, así como herramientas JavaScript instaladas globalmente. [ 6 ] Cuando se utiliza como gestor de dependencias para un proyecto local, npm puede instalar, en un solo comando, todas las dependencias de un proyecto a través del package.jsonarchivo. [ 7 ] En el package.jsonarchivo, cada dependencia puede especificar un rango de versiones válidas utilizando el esquema de versionado semántico, lo que permite a los desarrolladores actualizar automáticamente sus paquetes y, al mismo tiempo, evitar cambios incompatibles no deseados. [ 8 ] npm también proporciona herramientas de actualización de versiones para que los desarrolladores etiqueten sus paquetes con una versión en particular. [ 9 ] npm también proporciona el package-lock.json[ 10 ] archivo que contiene la entrada de la versión exacta utilizada por el proyecto después de evaluar el versionado semántico en package.json.
El comando npx , que es un acrónimo de Node Package eXecuter , [ 11 ] ejecuta paquetes sin instalarlos. [ 12 ] : 22
El cliente de interfaz de línea de comandos de npm permite a los usuarios consumir y distribuir módulos JavaScript disponibles en el registro. [ 13 ] En la versión 6 de npm, se introdujo la función de auditoría para ayudar a los desarrolladores a identificar y corregir vulnerabilidades de seguridad en los paquetes instalados. [ 14 ] La fuente de las vulnerabilidades de seguridad se obtuvo de informes encontrados en la Plataforma de Seguridad de Node (NSP) y se ha integrado con npm desde la adquisición de NSP por parte de npm. [ 15 ]
Registro
Los paquetes en el registro están en formato ECMAScript Module (ESM) o CommonJS e incluyen un archivo de metadatos en formato JSON . [ 16 ] Más de 3,1 millones de paquetes están disponibles en el registro principal de npm. [ 17 ] El registro no tiene ningún proceso de verificación para el envío, lo que significa que los paquetes que se encuentran allí pueden ser potencialmente de baja calidad, inseguros o maliciosos. [ 16 ] En cambio, npm se basa en los informes de los usuarios para eliminar paquetes si violan las políticas por ser de baja calidad, inseguros o maliciosos. [ 18 ] npm expone estadísticas que incluyen el número de descargas y el número de paquetes dependientes para ayudar a los desarrolladores a juzgar la calidad de los paquetes. [ 19 ] Internamente, npm se basa en la base de datos NoSQL Couch DB para administrar los datos disponibles públicamente. [ 20 ]
Historia
npm (originalmente abreviatura de Node Package Manager) fue creado en 2010 por Isaac Z. Schlueter como respuesta a los sistemas de empaquetado de módulos existentes en el ecosistema JavaScript, que consideraba inadecuados. Schlueter se inspiró en herramientas anteriores como PEAR para PHP y CPAN para Perl , y su objetivo era desarrollar un gestor de paquetes ligero y orientado a la comunidad, diseñado para el entorno de ejecución Node.js. [ 21 ]
npm se introdujo como una alternativa más capaz a una herramienta anterior basada en scripts de shell llamada pm, que tenía características limitadas para administrar paquetes de Node.js. [ 22 ] La primera versión de npm se lanzó el 12 de enero de 2010. [ 23 ]
Con el tiempo, npm se fue popularizando entre la comunidad de desarrolladores de Node.js. Su facilidad de uso, velocidad y capacidad para distribuir código reutilizable contribuyeron a su uso generalizado como gestor de paquetes. Desempeñó un papel fundamental en el desarrollo del ecosistema JavaScript al permitir una gestión eficiente de dependencias y el intercambio de bibliotecas de código abierto.
En 2014, la empresa npm, Inc. fue establecida en Oakland, California por Schlueter y Laurie Voss para supervisar el mantenimiento del registro npm y proporcionar servicios relacionados. [ 24 ]
En julio de 2018, Bryan Bogensberger fue nombrado director ejecutivo de npm, Inc. Durante su gestión, la empresa enfrentó desafíos tanto técnicos como comunitarios, incluyendo preocupaciones relacionadas con el rendimiento del registro y la transparencia organizacional. [ 25 ] Voss dejó la empresa en julio de 2019, seguido por Bogensberger en septiembre del mismo año. [ 24 ]
En marzo de 2020, npm, Inc. fue adquirida por GitHub , una subsidiaria de Microsoft . La adquisición se presentó como un paso hacia la mejora de la infraestructura del registro de npm y el fortalecimiento de la integración con las herramientas para desarrolladores de GitHub. [ 26 ]
Tras la adquisición, GitHub se comprometió a mantener el registro público de npm gratuito y abierto a la comunidad de desarrolladores. También anunció mejoras, entre las que se incluyen funciones de seguridad optimizadas, mejores herramientas de línea de comandos y compatibilidad con la publicación a través de GitHub Actions.
En 2025, npm seguía siendo uno de los registros de paquetes de software más utilizados, albergando una gran cantidad de paquetes de código abierto y gestionando miles de millones de descargas de forma regular. Continúa funcionando como un componente de infraestructura central para los flujos de trabajo de JavaScript y desarrollo web.
Controversias sobre los paquetes
almohadilla izquierda
En marzo de 2016, un paquete llamado left-padfue retirado de la plataforma como resultado de una disputa de nombres entre Azer Koçulu, un ingeniero de software independiente, y Kik . [ 27 ] [ 28 ] El paquete era inmensamente popular en la plataforma, siendo utilizado por miles de proyectos y alcanzando 15 millones de descargas antes de su eliminación. [ 27 ] [ 29 ] Varios proyectos críticos para el ecosistema de JavaScript, incluidos Babel y Webpack, dependían de él left-pady quedaron inutilizables. [ 30 ] Aunque el paquete fue republicado tres horas después, [ 31 ] causó una interrupción generalizada, lo que llevó a npm a cambiar sus políticas con respecto a la retirada de paquetes para evitar un evento similar en el futuro. [ 32 ]
flujo de mapa plano
En noviembre de 2018, se descubrió que se había añadido un paquete malicioso como dependencia a la versión 3.3.6 del popular paquete event-stream. [ 33 ] El paquete malicioso, llamado flatmap-stream, contenía una carga útil cifrada que robaba bitcoins de ciertas aplicaciones. [ 34 ]
pac-resolver
En mayo de 2021, se descubrió que pac-resolverun paquete npm que recibía más de 3 millones de descargas por semana tenía una vulnerabilidad de ejecución remota de código . [ 35 ] La vulnerabilidad se debía a la forma en que el paquete manejaba los archivos de configuración y se corrigió en las versiones 5 y posteriores. [ 36 ]
colores y falsificador
En enero de 2022, el mantenedor del popular paquete colorsenvió cambios que imprimían texto basura en un bucle infinito. [ 29 ] El mantenedor también limpió el repositorio de otro paquete popular, faker, y su paquete en npm, y lo reemplazó con un README que decía: "¿Qué le pasó realmente a Aaron Swartz ?" [ 37 ]
node-ipc y peacenotwar
En marzo de 2022, el desarrollador Brandon Nozaki Miller , mantenedor del node-ipcpaquete, agregó peacenotwarcomo dependencia al paquete. peacenotwarSobrescribe recursivamente el contenido del disco duro de una máquina afectada con el emoji de corazón si tiene una dirección IP bielorrusa o rusa. El paquete también deja un archivo de texto en la máquina que contiene un mensaje de protesta por la invasión rusa de Ucrania . Vue.js , que usa node-ipccomo dependencia, no fijó sus dependencias a una versión segura, lo que significa que algunos usuarios de Vue.js tenían el peacenotwar paquete si estaban usando su última versión. [ 38 ] [ 39 ] El paquete también estuvo brevemente presente como dependencia en la versión 3.1 de Unity Hub . Sin embargo, se lanzó una corrección el mismo día para eliminar la dependencia. [ 40 ]
gran número
En mayo de 2023, se descubrió que varios paquetes de npm, incluido , bignumhabían sido vulnerados, robando credenciales e información de los usuarios de las máquinas afectadas. Los investigadores descubrieron que estos paquetes habían sido comprometidos mediante una vulnerabilidad que involucraba buckets de Amazon S3 y la node-gypherramienta de línea de comandos. [ 41 ]
Ataque a la cadena de suministro en septiembre de 2025
En septiembre de 2025, hasta 18 paquetes populares de npm se vieron comprometidos con malware como parte de un ataque a la cadena de suministro. Los paquetes fueron comprometidos mediante un ataque de phishing dirigido a los mantenedores de paquetes. Tras el compromiso de las cuentas, los atacantes comenzaron a publicar paquetes con el malware. Este interceptaba las transacciones de criptomonedas en el navegador y las redirigía a las cuentas de los atacantes. [ 42 ] [ 43 ]
Gusano autorreplicante de septiembre de 2025
También en septiembre de 2025, apareció un gusano autorreplicante apodado Shai-Hulud que roba las credenciales de desarrollador de GitHub de los sistemas afectados para propagarse a otros proyectos. Hasta el 16 de septiembre, el gusano había afectado a más de 187 paquetes. [ 44 ]
Granjas de tokens de noviembre de 2025
En noviembre de 2025, investigadores de Amazon Web Services descubrieron más de 150.000 paquetes alojados en npm que estaban conectados a una campaña de minería de tokens de la cadena de bloques Tea . [ 45 ] [ 46 ]
Ataques a la cadena de suministro de Mini Shai-Hulud entre mayo y junio de 2026
Entre mayo y junio de 2026, se produjeron varios ataques a la cadena de suministro de software mediante un gusano autopropagante llamado Mini Shai-Hulud, atribuido al grupo de hackers TeamPCP, que afectó a empresas como GitHub, OpenAI y Mercor. [ 47 ] [ 48 ] [ 49 ]
Alternativas
Hay varias alternativas de código abierto a npm para instalar JavaScript modular, incluyendo pnpm , Yarn , [ 50 ] Bun y Deno . Deno y Bun también proporcionan un entorno de ejecución de JavaScript, mientras que solo Deno opera independientemente del Registro npm o de cualquier repositorio centralizado [ 51 ] y su soporte para el Registro npm todavía es objeto de trabajo continuo en progreso a partir de enero de 2024. [ 52 ] Todos son compatibles con el Registro npm público y lo usan por defecto, pero proporcionan diferentes experiencias del lado del cliente, generalmente enfocadas en mejorar el rendimiento y el determinismo en comparación con el cliente npm. [ 53 ]
Véase también
Referencias
- ↑ "GitHub, propiedad de Microsoft, adquirirá el gestor de paquetes JavaScript Npm" . GeekWire . 17 de marzo de 2020.
- ↑ "Primeras versiones de npm" . GitHub . Consultado el 5 de enero de 2019 .
- ↑ "Versión 12.0.1" . 10 de julio de 2026. Consultado el 11 de julio de 2026 .
- ↑ Dierx, Peter (30 de marzo de 2016). "Guía para principiantes de npm: el gestor de paquetes de Node" . sitepoint . Consultado el 22 de julio de 2016 .
- ↑ "npm" . npm . 15 de mayo de 2024. Archivado del original el 14 de mayo de 2024.
- ↑ Ellingwood, Justin. "Cómo usar npm para administrar paquetes de Node.js en un servidor Linux" . DigitalOcean . Consultado el 22 de octubre de 2016 .
- ↑ "npm-install" . docs.npmjs . Consultado el 22 de octubre de 2016 .
- ↑ "semver" . docs.npmjs . Archivado del original el 3 de diciembre de 2016. Consultado el 22 de octubre de 2016 .
- ↑ "npm-version" . docs.npm . Consultado el 29 de octubre de 2016 .
- ↑ Koirala, Shivprasad (21 de agosto de 2017). "¿Cuál es la necesidad de package-lock.json en Node?" . codeproject .
- ↑ Turbak, Lyn (2024). "Desarrollo y colaboración en aplicaciones React JS" (PDF) . Wellesley College .
- ↑ Duldulao, Devlin Basilan; Cabagnot, Ruby Jane Leyva (2021), "Getting Started with React Function Components and TypeScript" , Practical Enterprise React , Berkeley, CA: Apress, pp. 21–38 , doi : 10.1007/978-1-4842-6975-6_3 , ISBN 978-1-4842-6974-9Consultado el 4 de marzo de 2025.
- ↑ Ampersand.js. "Ampersand.js – Aprende" . ampersandjs.com . Archivado del original el 4 de octubre de 2016. Consultado el 22 de julio de 2016 .
- ↑ npm. "'npm audit': identifica y corrige dependencias inseguras" . El blog de npm . Consultado el 14 de agosto de 2018 .
- ↑ npm. "El servicio Node Security Platform se cerrará el 30/9" . El blog de npm . Consultado el 14 de agosto de 2018 .
- 1 2 Ojamaa, Andres; Duuna, Karl (2012). "Evaluación de la seguridad de la plataforma Node.js" . Conferencia Internacional de 2012 sobre Tecnología de Internet y Transacciones Seguras . IEEE. ISBN 978-1-4673-5325-0Consultado el 22 de julio de 2016 .
- ↑ "npm | Inicio" . npmjs.com . Archivado del original el 13 de abril de 2018. Consultado el 27 de junio de 2024 .
- ↑ "Código de conducta de npm: contenido aceptable de los paquetes" . Consultado el 9 de mayo de 2017 .
- ↑ Vorbach, Paul. "npm-stat: estadísticas de descarga para paquetes NPM" . npm-stat.com . Archivado del original el 11 de agosto de 2016. Consultado el 9 de agosto de 2016 .
- ↑ "registro | npm Docs" . docs.npmjs.com . Consultado el 10 de mayo de 2021 .
- ^ Schlueter, Isaac Z. (25 de marzo de 2013). "Olvídese de CommonJS. Está muerto. Somos JavaScript del lado del servidor" . GitHub .
- ↑ "npm/cli" . GitHub .
- ↑ "El momento New York Times de npm" . Blog de npm . 12 de enero de 2010. Consultado el 27 de septiembre de 2025 .
- 1 2 Chan, Rosalie. "Laurie Voss, cofundadora y directora de datos de NPM, renuncia" . Business Insider . Consultado el 30 de junio de 2021 .
- ↑ Chan, Rosalie. "Bryan Bogensberger, CEO de la startup de paquetes JavaScript NPM, renuncia" . Business Insider . Consultado el 30 de junio de 2021 .
- ↑ Friedman, Nat (16 de marzo de 2020). "npm se une a GitHub" . El blog de GitHub . Consultado el 8 de septiembre de 2025 .
- 1 2 Williams, Chris. "Cómo un desarrollador rompió Node, Babel y miles de proyectos en 11 líneas de JavaScript" . The Register . Recuperado el 17 de abril de 2016 .
- ↑ Collins, Keith (27 de marzo de 2016). "Cómo un programador rompió internet borrando un pequeño fragmento de código" . Quartz . Consultado el 23 de diciembre de 2020 .
- 1 2 Sharma, Ax (27 de julio de 2022). "El software de protesta en auge: por qué los desarrolladores están saboteando su propio código" . TechCrunch . Recuperado el 11 de mayo de 2024 .
- ↑ "Cómo 17 líneas de código acabaron con las startups más prometedoras de Silicon Valley" . HuffPost . 24 de marzo de 2016. Consultado el 11 de mayo de 2024 .
- ↑ "kik, left-pad y npm" . Consultado el 9 de mayo de 2017 .
- ↑ "cambios en la política de despublicación" . Blog de npm (Archivo) . Consultado el 23 de enero de 2022 .
- ↑ Goodin, Dan (26 de noviembre de 2018). "Software de código abierto ampliamente utilizado contenía una puerta trasera para robar bitcoins" . Ars Technica . Consultado el 11 de mayo de 2024 .
- ↑ Claburn, Thomas. "Revisa tus repositorios... Código para robar criptomonedas se infiltra en una biblioteca NPM bastante popular (2 millones de descargas por semana)" . www.theregister.com . Consultado el 11 de mayo de 2024 .
- ↑ Sharma, Ax (2 de septiembre de 2021). "El paquete NPM con 3 millones de descargas semanales tenía una grave vulnerabilidad" . Ars Technica . Recuperado el 11 de mayo de 2024 .
- ↑ Claburn, Thomas. "Una biblioteca de JavaScript descargada 3 millones de veces por semana expone las aplicaciones al secuestro mediante configuraciones de proxy maliciosas" . www.theregister.com . Consultado el 11 de mayo de 2024 .
- ↑ "Un desarrollador corrompe las bibliotecas 'colors' y 'faker' de NPM, lo que provoca la rotura de miles de aplicaciones" . Bleeping Computer . Consultado el 9 de enero de 2022 .
- ↑ "Gran sabotaje: un famoso paquete npm elimina archivos para protestar contra la guerra en Ucrania" . Bleeping Computer . Consultado el 17 de marzo de 2022 .
- ↑ Juha Saarinen (17 de marzo de 2022). "Dependencia del paquete npm 'Protestware' etiquetada como ataque a la cadena de suministro" . Noticias de TI . nextmedia .
- ↑ Proven, Liam (18 de marzo de 2022). "Biblioteca de JavaScript actualizada para borrar archivos de ordenadores rusos" . The Register . Situation Publishing. Archivado del original el 18 de marzo de 2022. Recuperado el 18 de marzo de 2022 .
- ↑ Burt, Jeff. "Buckets S3 secuestrados utilizados en ataques a paquetes npm" . www.theregister.com . Consultado el 11 de mayo de 2024 .
- ↑ "Los paquetes npm debug y chalk se han visto comprometidos" . www.aikido.dev . Consultado el 8 de septiembre de 2025 .
- ↑ "El autor de npm, Qix, se ve comprometido mediante un correo electrónico de phishing en un importante ataque a la cadena de suministro" . Socket . Consultado el 8 de septiembre de 2025 .
- ↑ "Gusano autorreplicante afecta a más de 180 paquetes de software – Krebs on Security" . Krebs on Security . 16 de septiembre de 2025. Consultado el 17 de septiembre de 2025 .
- ↑ Lyons, Jessica (14 de noviembre de 2025). "Los delincuentes inundan npm con más de 150.000 paquetes basura para obtener tokens TEA" . The Register . Archivado del original el 15 de noviembre de 2025. Recuperado el 17 de noviembre de 2025 .
- ↑ Tran, Chi; Bacon, Charlie (13 de noviembre de 2025). "Amazon Inspector detecta más de 150 000 paquetes maliciosos vinculados a una campaña de minería de tokens" . Amazon Web Services . Archivado del original el 17 de noviembre de 2025. Recuperado el 17 de noviembre de 2025 .
- ↑ Greenberg, Andy; Newman, Lily Hay. "Un grupo de hackers está envenenando el código abierto a una escala sin precedentes" . Wired . ISSN 1059-1028 . Consultado el 15 de junio de 2026 en www.wired.com.
- ↑ Goodin, Dan (1 de junio de 2026). "Docenas de paquetes de Red Hat con puertas traseras a través de su canal oficial NPM" . Ars Technica . Consultado el 15 de junio de 2026 .
- ↑ Sharwood, Simon (13 de mayo de 2026). "El grupo de malware TeamPCP publica el código fuente de su gusano Shai-Hulud en GitHub" . The Register . Consultado el 15 de junio de 2026 .
- ↑ "¡Hola, Yarn!" . El blog de npm . 11 de octubre de 2016 . Consultado el 17 de diciembre de 2016 .
- ↑ "Gestión de dependencias" . Documentación de Deno . Consultado el 6 de enero de 2024 .
- ↑ "Módulos Node y npm | Documentación de Deno" . docs.deno.com . Consultado el 16 de enero de 2024 .
- ↑ Katz, Yehuda (11 de octubre de 2016). "Por qué trabajo en Yarn" . Recuperado el 17 de diciembre de 2016 .
Enlaces externos
- Sitio web oficial
- Sistemas de gestión de paquetes por línea de comandos
- Sistemas de gestión de paquetes gratuitos
- Software libre programado en JavaScript
- Herramientas de programación JavaScript
- Software gratuito de Microsoft
- Software que utiliza la licencia artística
- Software de 2010