start proyecto node instalar example crear node.js npm

node.js - proyecto - npm version



Ventajas de las dependencias empaquetadas sobre las dependencias normales en NPM (4)

npm nos permite especificar bundledDependencies pero ¿cuáles son las ventajas de hacerlo? Supongo que si queremos estar absolutamente seguros de que obtendremos la versión correcta, incluso si el módulo al que hacemos referencia se elimina, o tal vez haya un beneficio de velocidad con la agrupación.

¿Alguien conoce las ventajas de las dependencias empaquetadas sobre las dependencias normales?

Extracto de la definición de dependencias empaquetadas aquí para su conveniencia:

bundledDependencies
Matriz de nombres de paquetes que se incluirán cuando se publique el paquete.

Si esto se deletrea "bundleDependencies", entonces eso también es honorable.

Por ejemplo, bundledDependencies: [''foo'', ''bar'']


Operacionalmente, miro bundledDependencies como el almacén de módulos privados de un módulo, donde las dependencias son más públicas, resueltas entre su módulo y sus dependencias (y subdependencias). Su módulo puede depender de una versión anterior de, digamos, reaccionar, pero una dependencia requiere lo último y lo mejor. Su paquete / instalación dará como resultado su versión node_modules/$yourmodule/node_modules/react en node_modules/$yourmodule/node_modules/react , mientras que su dependencia obtendrá su versión en node_modules/react (o node_modules/$dependency/node_modules/react si así lo desean).

Una advertencia: Recientemente me encontré con una dependencia que no configuró adecuadamente su dependencia en reaccionar, y al reaccionar en bundledDependencies provocó que ese módulo dependiente fallara en el tiempo de ejecución.


Otra ventaja es que puede poner allí sus dependencias internas (componentes de la aplicación) y luego simplemente requerirlas en su aplicación como si fueran módulos independientes en lugar de ocupar su lib / y publicarlas en npm.

Si / cuando se hayan madurado hasta el punto de que puedan vivir como módulos separados, puede ponerlos en npm fácilmente, sin modificar su código.


Uno de los mayores problemas en este momento con Node es qué tan rápido está cambiando. Esto significa que los sistemas de producción pueden ser muy frágiles y una npm update puede romper fácilmente las cosas.

El uso de bundledDependencies es una forma de evitar este problema al garantizar, como correctamente conjeturas, que siempre entregará las dependencias correctas sin importar lo que pueda estar cambiando.

También puede usar esto para agrupar sus propios paquetes privados y entregarlos con la instalación.


Para el lector rápido : este QA es sobre el campo package.json bundledDependencies, no sobre el package .

Qué incluyen las dependencias

"bundledDependencies" es exactamente lo que su nombre implica. Dependencias que deberían estar dentro de tu proyecto. Entonces la funcionalidad es básicamente la misma que las dependencias normales. También se empaquetarán cuando se ejecute el npm pack .

Cuándo usarlos

Las dependencias normales generalmente se instalan desde el registro npm. Por lo tanto, las dependencias empaquetadas son útiles cuando:

  • desea volver a utilizar una biblioteca de terceros que no proviene del registro npm o que se modificó
  • quieres volver a usar tus propios proyectos como módulos
  • quieres distribuir algunos archivos con tu módulo

De esta forma, no tiene que crear (y mantener) su propio repositorio npm, sino obtener los mismos beneficios que obtiene de los paquetes npm.

Cuándo no usar dependencias empaquetadas

Al desarrollar, no creo que el punto principal sea prevenir actualizaciones accidentales. Tenemos mejores herramientas para eso, a saber, repositorios de código (git, mercurial, svn ...) o ahora bloquear archivos.

Para fijar sus versiones de paquete, puede usar:

  • Opción 1: utilice la nueva versión 5 de NPM que viene con el nodo 8. Utiliza un archivo package-lock.json (consulte el blog del nodo y la versión del nodo 8)

  • Opción 2: use hilo en lugar de npm . Es un administrador de paquetes de Facebook, más rápido que npm y usa un archivo yarn.lock . Utiliza el mismo package.json . package.json contrario.

Esto es comparable a los archivos de bloqueo de otros gestores de paquetes como Bundler o Cargo. Es similar al npm-shrinkwrap.json de npm, sin embargo no tiene pérdidas y genera resultados reproducibles.

npm realidad copió esa característica del yarn , entre otras cosas.

  • Opción 3: este fue el enfoque recomendado anteriormente, que ya no recomiendo. La idea era usar npm shrinkwrap mayor parte del tiempo, y algunas veces poner todo, incluida la carpeta node_module, en el repositorio de código. O posiblemente use un shrinkpack . Las mejores prácticas en ese momento se discutieron en el blog node.js y en los sitios web para desarrolladores de joyent .

Ver también

Esto está un poco fuera del alcance de la pregunta, pero me gustaría mencionar el último tipo de dependencias (que yo sepa): las dependencias entre pares . También vea esta pregunta relacionada con SO y posiblemente los documentos de yarn en bundledDependencies .