stringtranslate.com

npm

npm es un administrador de paquetes para el lenguaje de programación JavaScript mantenido por npm, Inc., una subsidiaria de GitHub . npm es el administrador 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]

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 de pago, llamada registro npm. Se accede al registro a través del cliente, y se pueden explorar y buscar los paquetes disponibles a través del sitio web de npm. El administrador 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 un acrónimo recursivo de "npm no es un acrónimo". [5]

Historia

npm fue desarrollado por Isaac Z. Schlueter como resultado de haber "visto que el empaquetado de módulos se hacía de manera terrible" y con la inspiración de otros proyectos similares como PEAR ( PHP ) y CPAN ( Perl ). [6] npm es un reemplazo de JavaScript para pm, un script de shell . [7]

La empresa npm, Inc. fue fundada en 2014 en Oakland, California , Estados Unidos, con Laurie Voss como cofundadora. Bryan Bogensberger se unió a la empresa como director ejecutivo en julio de 2018 y renunció en septiembre de 2019. [8] Antes de la renuncia de Bogensberger, Laurie Voss renunció en julio de 2019. [9]

En marzo de 2020, npm fue adquirido por GitHub , que es una subsidiaria de Microsoft .

Uso

npm puede gestionar paquetes que son dependencias locales de un proyecto en particular, así como herramientas de JavaScript instaladas globalmente. [10] Cuando se utiliza como un administrador de dependencias para un proyecto local, npm puede instalar, en un comando, todas las dependencias de un proyecto a través del package.jsonarchivo. [11] En el package.jsonarchivo, cada dependencia puede especificar un rango de versiones válidas utilizando el esquema de versiones semánticas, lo que permite a los desarrolladores actualizar automáticamente sus paquetes y, al mismo tiempo, evitar cambios no deseados. [12] npm también proporciona herramientas de actualización de versiones para que los desarrolladores etiqueten sus paquetes con una versión particular. [13] npm también proporciona el archivo package-lock.json[14] que tiene la entrada de la versión exacta utilizada por el proyecto después de evaluar las versiones semánticas en package.json.

Cliente

El cliente de interfaz de línea de comandos de npm permite a los usuarios consumir y distribuir módulos de JavaScript que están disponibles en el registro. [15]

En febrero de 2018, se descubrió un problema en la versión 5.7.0 que, al ejecutarse sudo npmen sistemas Linux, cambiaba la propiedad de los archivos del sistema, lo que dañaba permanentemente el sistema operativo. [16]

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. [17] La ​​fuente de las vulnerabilidades de seguridad se tomó de los informes encontrados en Node Security Platform (NSP) y se ha integrado con npm desde la adquisición de NSP por parte de npm. [18]

Registro

Los paquetes en el registro están en formato ECMAScript Module (ESM) o CommonJS e incluyen un archivo de metadatos en formato JSON . [19]

Hay más de 3,1 millones de paquetes disponibles en el registro principal de npm. [20]

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. [19] En cambio, npm se basa en los informes de los usuarios para eliminar los paquetes si violan las políticas por ser de baja calidad, inseguros o maliciosos. [21] npm expone estadísticas que incluyen la cantidad de descargas y la cantidad de paquetes dependientes para ayudar a los desarrolladores a juzgar la calidad de los paquetes. [22]

Internamente, npm se basa en la base de datos NoSQL Couch para administrar los datos disponibles públicamente. [23]

Seguridad y disrupción

almohadilla izquierda

En marzo de 2016, un paquete llamado left-padfue despublicado como resultado de una disputa de nombres entre Azer Koçulu, un ingeniero de software individual, y Kik . [24] [25] El paquete fue inmensamente popular en la plataforma, siendo dependiente de miles de proyectos y alcanzó 15 millones de descargas antes de su eliminación. [24] [26] Varios proyectos críticos para el ecosistema de JavaScript, incluidos Babel y Webpack, dependían de él left-pady se volvieron inutilizables. [27] Aunque el paquete se volvió a publicar tres horas después, [28] causó una interrupción generalizada, lo que llevó a npm a cambiar sus políticas con respecto a la despublicación para evitar un evento similar en el futuro. [29]

paz, no guerra

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 tienen una dirección IP bielorrusa o rusa. El paquete también deja un archivo de texto en la máquina que contiene un mensaje en protesta por la invasión rusa de Ucrania . Vue.js , que usa node-ipccomo dependencia, no ancló sus dependencias a una versión segura, lo que significa que algunos usuarios de Vue.js se vieron afectados por el paquete malicioso si la dependencia se obtuvo como el paquete más reciente. [30] [31] La dependencia afectada también estuvo presente brevemente en la versión 3.1 de Unity Hub ; sin embargo, se lanzó una revisión el mismo día para eliminar el problema. [32]

Otros incidentes notables

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]

En mayo de 2021, pac-resolverse descubrió que un 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 era resultado de la forma en que el paquete entregaba los archivos de configuración y se solucionó en las versiones 5 y posteriores. [36]

En enero de 2022, el mantenedor del popular paquete colorsenvió cambios que imprimían texto basura en un bucle infinito. [26] 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]

En mayo de 2023, se descubrió que varios paquetes npm bignumhabían sido explotados, robando credenciales de usuario e información de las máquinas afectadas. Los investigadores descubrieron que estos paquetes habían sido comprometidos a través de un exploit que involucraba los buckets de Amazon S3 y la node-gypherramienta de línea de comandos. [38]

Alternativas

Hay varias alternativas de código abierto a npm para instalar JavaScript modular, entre las que se incluyen Yarn , [39] Bun y Deno . Deno y Bun también proporcionan un entorno de ejecución de JavaScript, mientras que solo Deno opera de forma independiente de NPM Registry o de cualquier repositorio centralizado [40] y su compatibilidad con NPM Registry sigue siendo un tema de trabajo en curso a partir de enero de 2024. [41] Todas son compatibles con el registro público de npm y lo utilizan de forma predeterminada, pero proporcionan diferentes experiencias del lado del cliente, generalmente centradas en mejorar el rendimiento y el determinismo en comparación con el cliente de npm. [42]

Véase también

Referencias

  1. ^ "GitHub, propiedad de Microsoft, adquirirá el gestor de paquetes de JavaScript Npm". GeekWire . 17 de marzo de 2020.
  2. ^ "Primeras versiones de npm". GitHub . Consultado el 5 de enero de 2019 .
  3. ^ "Versión 10.8.3". 28 de agosto de 2024. Consultado el 22 de septiembre de 2024 .
  4. ^ 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 .
  5. ^ "npm". npm . 15 de mayo de 2024. Archivado desde el original el 14 de mayo de 2024.
  6. ^ Schlueter, Isaac Z. (25 de marzo de 2013). "Olvídense de CommonJS. Está muerto. **Somos JavaScript del lado del servidor.**". GitHub .
  7. ^ "NPM/Cli". GitHub .
  8. ^ Chan, Rosalie. «Bryan Bogensberger, director ejecutivo de la startup de paquetes de JavaScript NPM, dimite». Business Insider . Business Insider . Consultado el 30 de junio de 2021 .
  9. ^ Chan, Rosalie. «Laurie Voss, cofundadora y directora de datos de NPM, dimite». Business Insider . Business Insider . Consultado el 30 de junio de 2021 .
  10. ^ Ellingwood, Justin. "Cómo usar npm para administrar paquetes Node.js en un servidor Linux". DigitalOcean . Consultado el 22 de octubre de 2016 .
  11. ^ "npm-install". docs.npmjs . Consultado el 22 de octubre de 2016 .
  12. ^ "semver". docs.npmjs . Archivado desde el original el 3 de diciembre de 2016 . Consultado el 22 de octubre de 2016 .
  13. ^ "npm-version". docs.npm . Consultado el 29 de octubre de 2016 .
  14. ^ Koirala, Shivprasad (21 de agosto de 2017). "¿Cuál es la necesidad de package-lock.json en Node?". codeproject .
  15. ^ Ampersand.js. «Ampersand.js – Learn». ampersandjs.com . Consultado el 22 de julio de 2016 .
  16. ^ "Los permisos críticos del sistema de archivos de Linux están siendo modificados por la última versión". GitHub . Consultado el 25 de febrero de 2018 .
  17. ^ npm. «'npm audit': identificar y corregir dependencias inseguras». El blog de npm . Consultado el 14 de agosto de 2018 .
  18. ^ npm. "El servicio Node Security Platform dejará de funcionar el 30 de septiembre". El blog de npm . Consultado el 14 de agosto de 2018 .
  19. ^ ab 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-0. Recuperado el 22 de julio de 2016 .
  20. ^ "npm | Inicio". npmjs.com . Consultado el 27 de junio de 2024 .
  21. ^ "Código de conducta de npm: contenido aceptable de los paquetes" . Consultado el 9 de mayo de 2017 .
  22. ^ Vorbach, Paul. «npm-stat: estadísticas de descarga de paquetes NPM». npm-stat.com . Archivado desde el original el 11 de agosto de 2016. Consultado el 9 de agosto de 2016 .
  23. ^ "registro | npm Docs". docs.npmjs.com . Consultado el 10 de mayo de 2021 .
  24. ^ ab Williams, Chris. "Cómo un desarrollador rompió Node, Babel y miles de proyectos en 11 líneas de JavaScript". The Register . Consultado el 17 de abril de 2016 .
  25. ^ 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 .
  26. ^ ab Sharma, Ax (27 de julio de 2022). "Protestware en aumento: por qué los desarrolladores sabotean su propio código". TechCrunch . Consultado el 11 de mayo de 2024 .
  27. ^ "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 .
  28. ^ "kik, left-pad y npm" . Consultado el 9 de mayo de 2017 .
  29. ^ "cambios en la política de anulación de publicaciones". Blog de npm (Archivo) . Consultado el 23 de enero de 2022 .
  30. ^ "GRAN sabotaje: el famoso paquete npm elimina archivos para protestar contra la guerra de Ucrania". Bleeping Computer . Consultado el 17 de marzo de 2022 .
  31. ^ Juha Saarinen (17 de marzo de 2022). "La dependencia del paquete npm 'Protestware' se considera un ataque a la cadena de suministro". Noticias de TI . nextmedia .
  32. ^ Proven, Liam (18 de marzo de 2022). «Biblioteca JavaScript actualizada para borrar archivos de computadoras rusas». The Register . Situation Publishing. Archivado desde el original el 18 de marzo de 2022 . Consultado el 18 de marzo de 2022 .
  33. ^ Goodin, Dan (26 de noviembre de 2018). «Un software de código abierto ampliamente utilizado contenía una puerta trasera que robaba bitcoins». Ars Technica . Consultado el 11 de mayo de 2024 .
  34. ^ Claburn, Thomas. "Revisa tus repositorios... Código que roba criptomonedas se cuela en una biblioteca NPM bastante popular (2 millones de descargas por semana)". www.theregister.com . Consultado el 11 de mayo de 2024 .
  35. ^ Sharma, Ax (2 de septiembre de 2021). «El paquete NPM con 3 millones de descargas semanales presentaba una vulnerabilidad grave». Ars Technica . Consultado el 11 de mayo de 2024 .
  36. ^ Claburn, Thomas. "La biblioteca 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 .
  37. ^ "Dev corrompe las bibliotecas NPM 'colors' y 'faker', lo que daña miles de aplicaciones". Bleeping Computer . Consultado el 9 de enero de 2022 .
  38. ^ Burt, Jeff. "Cubos S3 secuestrados utilizados en ataques a paquetes npm". www.theregister.com . Consultado el 11 de mayo de 2024 .
  39. ^ "¡Hola, Yarn!". El blog de npm . 11 de octubre de 2016. Consultado el 17 de diciembre de 2016 .
  40. ^ "Administración de dependencias". Deno Docs . Consultado el 6 de enero de 2024 .
  41. ^ "Módulos de Node y NPM | Deno Docs". docs.deno.com . Consultado el 16 de enero de 2024 .
  42. ^ Katz, Yehuda (11 de octubre de 2016). "Por qué trabajo en Yarn" . Consultado el 17 de diciembre de 2016 .

Enlaces externos