npm ( originalmente abreviatura de Node Package Manager ) [4] es un administrador de paquetes para el lenguaje de programación JavaScript .
Autor (es) original (es) | Isaac Z. Schlueter. |
---|---|
Desarrollador (es) | npm, Inc. (una subsidiaria de GitHub , [1] una subsidiaria de Microsoft ) |
Versión inicial | 12 de enero de 2010 [2] |
Lanzamiento estable | 7.14.0 [3] / 20 de mayo de 2021 |
Repositorio | |
Escrito en | JavaScript |
Plataforma | Multiplataforma |
Tipo | Gerente de empaquetación |
Licencia | Licencia Artística 2.0 |
Sitio web | www |
npm, Inc. es una subsidiaria de GitHub (una subsidiaria de Microsoft ), que proporciona alojamiento para el desarrollo de software y el control de versiones con el uso de Git .
NPM es el gestor de paquetes por defecto para el entorno de ejecución de JavaScript Node.js . Consiste en 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 pagados, llamado registro npm. Se accede al registro a través del cliente, y los paquetes disponibles se pueden explorar y buscar a través del sitio web de npm. El administrador de paquetes y el registro son administrados por npm, Inc.
Historia
npm está escrito completamente en JavaScript y fue desarrollado por Isaac Z. Schlueter como resultado de haber "visto el empaquetado de módulos hecho terriblemente" y con la inspiración de otros proyectos similares como PEAR ( PHP ) y CPAN ( Perl ). [5]
Roturas notables
- En marzo de 2016, npm atrajo la atención de la prensa [6] después de que un paquete llamado
left-pad
, históricamente utilizado como ejemplo que se había convertido en una dependencia de muchos paquetes populares de JavaScript, no se publicara como resultado de una disputa de nombres entre Azer Koculu, un software autodidacta. ingeniero y Kik. [7] [8] Aunque el paquete se volvió a publicar tres horas después, [9] causó una interrupción generalizada, lo que llevó a npm a cambiar sus políticas con respecto a la anulación de la publicación para evitar un evento similar en el futuro. [10] - En febrero de 2018, se descubrió un problema en la versión 5.7.0 en el que la ejecución
sudo npm
en sistemas Linux cambiaría la propiedad de los archivos del sistema, rompiendo permanentemente el sistema operativo. [11] - En julio de 2018, las credenciales npm de un mantenedor del popular
eslint-scope
paquete se vieron comprometidas, lo que resultó en un lanzamiento malicioso de laeslint-scope
versión 3.7.2. El código malicioso copió las credenciales npm de la máquina en ejecucióneslint-scope
y las subió al atacante. [12] - En noviembre de 2018, se descubrió que se había agregado un paquete malicioso como dependencia a la versión 3.3.6 del paquete popular
event-stream
. El paquete malicioso, llamadoflatmap-stream
, contenía una carga útil encriptada que robaba bitcoins de ciertas aplicaciones. Los administradores de npm eliminaron el paquete ofensivo. [13] [14] - En abril de 2020, un pequeño paquete llamado
is-promise
provocó una interrupción en las aplicaciones e implementaciones sin servidor en todo el mundo en virtud de ser una dependencia de muchas aplicaciones grandes e importantes. [15]
Descripción
npm se incluye como una característica recomendada en el instalador de Node.js. [16] npm consiste en un cliente de línea de comandos que interactúa con un registro remoto. Permite a los usuarios consumir y distribuir módulos JavaScript que están disponibles en el registro. [17] Los paquetes del registro están en formato CommonJS e incluyen un archivo de metadatos en formato JSON . [18] Más de 1,3 millones de paquetes están disponibles en el registro principal de npm. [19] 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. [18] 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. [20] 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. [21]
En la versión 6 de npm, se introdujo la función de auditoría para ayudar a los desarrolladores a identificar y corregir las vulnerabilidades de seguridad en los paquetes instalados. [22] La fuente de las vulnerabilidades de seguridad se tomó de los informes encontrados en la plataforma de seguridad de nodo (NSP) y se ha integrado con npm desde que npm adquirió NSP. [23]
Uso
npm puede administrar paquetes que son dependencias locales de un proyecto en particular, así como herramientas JavaScript instaladas globalmente. [24] Cuando se utiliza como administrador de dependencias para un proyecto local, npm puede instalar, en un comando, todas las dependencias de un proyecto a través del package.json
archivo. [25] En el package.json
archivo, cada dependencia puede especificar un rango de versiones válidas usando el esquema de control de versiones semántico, lo que permite a los desarrolladores actualizar automáticamente sus paquetes y, al mismo tiempo, evitar cambios importantes no deseados. [26] npm también proporciona herramientas de actualización de versiones para que los desarrolladores etiqueten sus paquetes con una versión en particular. [27] npm también proporciona el archivo package-lock.json
[28] que tiene la entrada de la versión exacta utilizada por el proyecto después de evaluar el control de versiones semántico en package.json
.
Alternativas
Hay una serie de alternativas de código abierto para la NGP para la instalación modular de JavaScript, incluyendo ied
, pnpm
, npmd
, e hilado, el último de los cuales fue lanzado por Facebook en octubre de 2016. [29] Todos ellos son compatibles con el registro NPM pública y usarlo de forma predeterminada, pero brindan diferentes experiencias del lado del cliente, generalmente enfocadas en mejorar el rendimiento y el determinismo en comparación con el cliente npm. [30]
En JSConf 2019, el ex CTO de npm anunció un nuevo registro de paquetes federado, Entropic, que tiene como objetivo la descentralización de JavaScript commons. [31]
Registro
Internamente, npm se basa en NoSQL Couch DB para administrar los datos disponibles públicamente. [32]
La empresa
La compañía detrás del software npm es npm, Inc, con sede en Oakland, California. El CEO Bryan Bogensberger, quien se unió a la compañía en julio de 2018, renunció en septiembre de 2019. Antes de la renuncia de Bogensberger, la cofundadora de npm, Laurie Voss, renunció en julio de 2019 [33].
GitHub anunció en marzo de 2020 que adquirirá npm, Inc. [34]
Ver también
- Repositorio de software
- Administrador de paquetes universal
Referencias
- ^ "GitHub propiedad de Microsoft para adquirir el administrador de paquetes JavaScript Npm" . GeekWire . 17 de marzo de 2020.
- ^ "Primeras versiones de npm" . GitHub . Consultado el 5 de enero de 2019 .
- ^ "Versión 7.14.0" . 20 de mayo de 2021 . Consultado el 21 de mayo de 2021 .
- ^ "Caída inicial. Feo, incompleto, y ni siquiera un" trabajo en progr… · npm / cli @ 4626dfa " . GitHub .
- ^ Schlueter, Isaac Z. (25 de marzo de 2013). "Olvídese de CommonJS. Está muerto. ** Somos JavaScript del lado del servidor. **" . GitHub .
- ^ Yegulalp, Serdar (23 de marzo de 2016). "Cómo un paquete de JavaScript tirado causó estragos" . InfoWorld . Consultado el 22 de julio de 2016 .
- ^ Williams, Chris. "Cómo un desarrollador acaba de romper Node, Babel y miles de proyectos en 11 líneas de JavaScript" . El registro . Consultado el 17 de abril de 2016 .
- ^ Collins, Keith. "Cómo un programador rompió Internet al eliminar un pequeño fragmento de código" . Cuarzo . Consultado el 23 de diciembre de 2020 .
- ^ "kik, pad izquierdo y npm" . Consultado el 9 de mayo de 2017 .
- ^ "cambios en la política de anulación de publicación" . Consultado el 9 de mayo de 2017 .
- ^ "Los permisos críticos del sistema de archivos de Linux están siendo cambiados por la última versión" . GitHub . Consultado el 25 de febrero de 2018 .
- ^ "¿Virus en eslint-scope? · Problema # 39 · eslint / eslint-scope" . GitHub .
- ^ "Detalles sobre el incidente del flujo de eventos" . El Blog de npm . Consultado el 28 de noviembre de 2018 .
- ^ "¿Dependencia con puerta trasera? Flatmap-stream-0.1.1 y flatmap-stream-0.1.2" . Github . Consultado el 28 de noviembre de 2018 .
- ^ "ERR_INVALID_PACKAGE_TARGET" . Github . Consultado el 22 de agosto de 2020 .
- ^ Dierx, Peter (30 de marzo de 2016). "Una guía para principiantes de npm - el administrador de paquetes de nodo" . sitepoint . Consultado el 22 de julio de 2016 .
- ^ Ampersand.js. "Ampersand.js - Aprender" . ampersandjs.com . Consultado el 22 de julio de 2016 .
- ^ a b Ojamaa, Andrés; Duuna, Karl (2012). "Evaluación de la seguridad de la plataforma Node.js" . 2012 Conferencia Internacional de Tecnología de Internet y Transacciones Aseguradas . IEEE. ISBN 978-1-4673-5325-0. Consultado el 22 de julio de 2016 .
- ^ Nassri, Ahmad (14 de abril de 2020). "¡Hasta luego, y gracias por todos los paquetes!" . El Blog de npm . Consultado el 6 de enero de 2021 .
- ^ "Código de conducta de npm: contenido aceptable del paquete" . Consultado el 9 de mayo de 2017 .
- ^ Vorbach, Paul. "npm-stat: descargar estadísticas para paquetes NPM" . npm-stat.com .
- ^ npm. " ' auditoría npm': identificar y corregir dependencias inseguras" . El Blog de npm . Consultado el 14 de agosto de 2018 .
- ^ npm. "El servicio Node Security Platform se está cerrando el 30/9" . El Blog de npm . Consultado el 14 de agosto de 2018 .
- ^ Ellingwood, Justin. "Cómo usar npm para administrar paquetes 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 . 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 .
- ^ "¡Hola, Yarn!" . El Blog de npm . 11 de octubre de 2016 . Consultado el 17 de diciembre de 2016 .
- ^ Katz, Yehuda (11 de octubre de 2016). "Por qué estoy trabajando en Yarn" . Consultado el 17 de diciembre de 2016 .
- ^ JSConf (3 de junio de 2019), La economía del código abierto por CJ Silverio | JSConf EU 2019 , consultado el 3 de junio de 2019
- ^ "registro | npm Docs" . docs.npmjs.com . Consultado el 10 de mayo de 2021 .
- ^ npm, inc. "Bryan Bogensberger, CEO de NPM, dimite en septiembre de 2019" . Business Insider . Consultado el 17 de febrero de 2020 .
- ^ Friedman, Nat (16 de marzo de 2020). "npm se une a GitHub" . El blog de GitHub .
enlaces externos
- Página web oficial