stringtranslate.com

npm

npm es un administrador de paquetes para el lenguaje de programación JavaScript mantenido por npm, Inc. npm es el administrador de paquetes predeterminado para el entorno de ejecución de JavaScript Node.js y se incluye como 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 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 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] npm es un reemplazo de JavaScript para pm, un script de shell . [6] Si bien se entiende comúnmente que "npm" es una abreviatura de "Node Package Manager", oficialmente significa "npm no es un acrónimo". [7]

En marzo de 2020 se anunció que GitHub adquirirá npm . [1]

Uso

npm puede administrar paquetes que son dependencias locales de un proyecto en particular, así como herramientas JavaScript instaladas globalmente. [8] Cuando se utiliza como administrador 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. [9] En el package.jsonarchivo, cada dependencia puede especificar un rango de versiones válidas utilizando 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. [10] npm también proporciona herramientas de modificación de versiones para que los desarrolladores etiqueten sus paquetes con una versión particular. [11] npm también proporciona el archivo package-lock.json[12] 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.

Cliente

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

En febrero de 2018, se descubrió un problema en la versión 5.7.0 en el que la ejecución sudo npmen sistemas Linux cambiaba la propiedad de los archivos del sistema, rompiendo permanentemente el sistema operativo. [14]

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. [15] 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. [dieciséis]

Registro

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

Más de 1,3 millones de paquetes están disponibles en el registro principal de npm. [18]

El registro no tiene ningún proceso de verificación de envío, lo que significa que los paquetes encontrados allí pueden ser potencialmente de baja calidad, inseguros o maliciosos. [17] 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. [19] 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. [20]

Internamente, npm se basa en NoSQL Couch DB para administrar los datos disponibles públicamente. [21]

Seguridad y disrupción

Problemas de la cadena de dependencia

En marzo de 2016, npm atrajo la atención de la prensa [22] después de que un paquete llamado left-pad, del que dependían muchos paquetes JavaScript populares, no se publicara como resultado de una disputa de nombre entre Azer Koçulu, un ingeniero de software individual, y Kik . [23] [24] Aunque el paquete se volvió a publicar tres horas después, [25] 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. [26]

En abril de 2020, un pequeño paquete llamado is-promiseprovocó una interrupción en las implementaciones y aplicaciones sin servidor en todo el mundo por ser una dependencia de muchas aplicaciones grandes e importantes. [27] [ se necesita fuente no primaria ]

Paquetes comprometidos y editados disruptivamente

En julio de 2018, las credenciales npm de un mantenedor del popular eslint-scopepaquete se vieron comprometidas, lo que resultó en una versión maliciosa de eslint-scopela versión 3.7.2. El código malicioso copió las credenciales npm de la máquina en ejecución eslint-scopey las cargó al atacante. [28]

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. El paquete malicioso, llamado flatmap-stream, contenía una carga útil cifrada que robaba bitcoins de ciertas aplicaciones. Los administradores de npm eliminaron el paquete infractor. [29] [30]

En enero de 2022, el mantenedor del popular paquete colorsimpulsó cambios que imprimían texto basura en un bucle infinito. El mantenedor también borró el repositorio de otro paquete popular, faker, y su paquete en npm, y lo reemplazó con un archivo README que decía: "¿Qué le pasó realmente a Aaron Swartz ?" [31]

En marzo de 2022, el desarrollador Brandon Nozaki Miller lanzó una versión del paquete node-ipcque contenía código malicioso que eliminaría archivos de usuarios con direcciones IP bielorrusas y rusas, en protesta por la invasión rusa de Ucrania . Vue.js , que se utiliza node-ipccomo dependencia, no fijó sus dependencias en 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. [32] [33] La dependencia afectada también estuvo presente brevemente en la versión 3.1 de Unity Hub ; Sin embargo, el mismo día se publicó una revisión para solucionar el problema. [34]

Alternativas

Hay una serie de alternativas de código abierto a npm para instalar JavaScript modular, incluidas , , iedYarn pnpm, [ 35 ] Bun y Deno . Deno y Bun también proporcionan un tiempo de ejecución de JavaScript, mientras que solo Deno opera independientemente del Registro NPM o de cualquier repositorio centralizado [36] y su compatibilidad con el registro NPM sigue siendo un tema de trabajo en curso a partir de enero de 2024. [37] Todos ellos son compatible con el registro público npm y lo usa de forma predeterminada, pero proporciona diferentes experiencias del lado del cliente, generalmente enfocadas en mejorar el rendimiento y el determinismo en comparación con el cliente npm. [38]npmd

Ver también

Referencias

  1. ^ ab "GitHub, propiedad de Microsoft, adquirirá el administrador de paquetes 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.4.0". 24 de enero de 2024 . Consultado el 20 de febrero de 2024 .
  4. ^ Dierx, Peter (30 de marzo de 2016). "Una guía para principiantes de npm: el administrador de paquetes de nodos". punto de sitio . Consultado el 22 de julio de 2016 .
  5. ^ Schlueter, Isaac Z. (25 de marzo de 2013). "Olvídese de CommonJS. Está muerto. **Somos JavaScript del lado del servidor.**". GitHub .
  6. ^ "MNP/Cli". GitHub .
  7. ^ npm [@npmjs] (22 de agosto de 2011). ""npm" no significa "Node Package Manager". Significa "npm no es un acrónimo". ¿Por qué no "NINAA"? Porque entonces sería un acrónimo" ( Tweet ) . Consultado el 9 de noviembre de 2023 , vía Twitter .
  8. ^ Ellingwood, Justin. "Cómo utilizar npm para administrar paquetes Node.js en un servidor Linux". Océano Digital . Consultado el 22 de octubre de 2016 .
  9. ^ "instalación npm". documentos.npmjs . Consultado el 22 de octubre de 2016 .
  10. ^ "semver". documentos.npmjs . Archivado desde el original el 3 de diciembre de 2016 . Consultado el 22 de octubre de 2016 .
  11. ^ "versión npm". documentos.npm . Consultado el 29 de octubre de 2016 .
  12. ^ Koirala, Shivprasad (21 de agosto de 2017). "¿Cuál es la necesidad de package-lock.json en Node?". proyecto de código .
  13. ^ Ampersand.js. "Ampersand.js: aprender". ampersandjs.com . Consultado el 22 de julio de 2016 .
  14. ^ "La última versión está cambiando los permisos críticos del sistema de archivos de Linux". GitHub . Consultado el 25 de febrero de 2018 .
  15. ^ npm. "'npm audit ': identificar y corregir dependencias inseguras ". El blog de npm . Consultado el 14 de agosto de 2018 .
  16. ^ npm. "El servicio Node Security Platform se cerrará el 30 de septiembre". El blog de npm . Consultado el 14 de agosto de 2018 .
  17. ^ ab Ojamaa, Andrés; Duuna, Karl (2012). "Evaluación de la seguridad de la plataforma Node.js". 2012 Conferencia Internacional sobre Tecnología de Internet y Transacciones Garantizadas . IEEE. ISBN 978-1-4673-5325-0. Consultado el 22 de julio de 2016 .
  18. ^ 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 .
  19. ^ "Código de conducta de npm: contenido aceptable del paquete" . Consultado el 9 de mayo de 2017 .
  20. ^ Vorbach, Paul. "npm-stat: descargar estadísticas para paquetes NPM". npm-stat.com .
  21. ^ "registro | npm Docs". docs.npmjs.com . Consultado el 10 de mayo de 2021 .
  22. ^ Yegulalp, Serdar (23 de marzo de 2016). "Cómo un paquete JavaScript arrancado causó estragos". InfoMundo . Consultado el 22 de julio de 2016 .
  23. ^ 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 .
  24. ^ Collins, Keith (27 de marzo de 2016). "Cómo un programador rompió Internet eliminando un pequeño fragmento de código". Cuarzo . Consultado el 23 de diciembre de 2020 .
  25. ^ "kik, left-pad y npm" . Consultado el 9 de mayo de 2017 .
  26. ^ "cambios en la política de despublicación". Blog de npm (Archivo) . Consultado el 23 de enero de 2022 .
  27. ^ "ERR_INVALID_PACKAGE_TARGET". Github . Consultado el 22 de agosto de 2020 .
  28. ^ "¿Virus en eslint-scope? · Número 39 · eslint/eslint-scope". GitHub .
  29. ^ "Detalles sobre el incidente del flujo de eventos". El blog de npm . Consultado el 28 de noviembre de 2018 .
  30. ^ "¿Dependencia con puerta trasera? Flatmap-stream-0.1.1 y flatmap-stream-0.1.2". Github . Consultado el 28 de noviembre de 2018 .
  31. ^ "El desarrollador corrompe los 'colores' de las bibliotecas de NPM y el 'falso' rompe miles de aplicaciones". Computadora que suena . Consultado el 9 de enero de 2022 .
  32. ^ "GRAN sabotaje: el famoso paquete npm elimina archivos para protestar contra la guerra de Ucrania". Computadora que suena . Consultado el 17 de marzo de 2022 .
  33. ^ Juha Saarinen (17 de marzo de 2022). "'La dependencia del paquete npm de Protestware está etiquetada como ataque a la cadena de suministro ". Noticias de TI . siguientemedia .
  34. ^ Probado, Liam (18 de marzo de 2022). "Biblioteca de JavaScript actualizada para borrar archivos de computadoras rusas". El registro . Publicación de situaciones. Archivado desde el original el 18 de marzo de 2022 . Consultado el 18 de marzo de 2022 .
  35. ^ "¡Hola, hilo!". El blog de npm . 11 de octubre de 2016 . Consultado el 17 de diciembre de 2016 .
  36. ^ "Gestión de dependencias". Deno Docs . Consultado el 6 de enero de 2024 .
  37. ^ "Módulos de nodo y npm | Deno Docs". docs.deno.com . Consultado el 16 de enero de 2024 .
  38. ^ Katz, Yehuda (11 de octubre de 2016). "Por qué estoy trabajando en Yarn" . Consultado el 17 de diciembre de 2016 .

enlaces externos