2012-07-12 5 views
15

La comprobación en node_module era el estándar de la comunidad, pero ahora también tenemos la opción de utilizar shrinkwrap. Esto último tiene más sentido para mí, pero siempre existe la posibilidad de que alguien haya "forzado la publicación" e introducido un error. ¿Hay algún inconveniente adicional?Registrar en node_modules vs. shrinkwrap

Respuesta

16

Mi puesto favorito/filosofía sobre este tema va todo el camino de vuelta (un largo tiempo en la tierra Node.js) a 2011:

https://web.archive.org/web/20150116024411/http://www.futurealoof.com/posts/nodemodules-in-git.html

Para citar directamente:

Si tiene una aplicación que implementa, verifique todas sus dependencias en node_modules. Si usa npm do deploy, solo defina bundleDependencies para esos módulos. Si tiene dependencias que deben compilarse, aún debe verificar el código y ejecutar $ npm Rebuild en deploy.

Todo el mundo que he dicho esto también me dice que soy un idiota y unas semanas después me dice que tenía razón y que compruebe node_modules en git ha sido una bendición para la implementación y el desarrollo. Es objetivamente mejor, pero aquí están algunas de las preguntas/quejas que parezco tener.

Creo que este sigue siendo el mejor consejo.

El escenario de publicación forzada es raro y npm shrinkwrap probablemente funcione para la mayoría de las personas. Pero si se está desplegando en un entorno de producción, nada le da la tranquilidad de saber cómo controlar todo el directorio node_modules.

Alternativamente, si realmente, realmente no desea comprobar en el directorio node_modules pero desea una mejor garantía de que no ha habido un empuje forzado, me sigue los consejos de npm help shrinkwrap:

Si desea evitar cualquier riesgo de que un autor bizantino reemplace un paquete que está utilizando con código que rompe su aplicación, puede modificar el archivo shrinkwrap para usar las referencias URL de git en lugar de números de versión para que npm siempre obtenga todos los paquetes de git.

Por supuesto, alguien podría ejecutar un extraño git rebase o algo así y modificar un hash de commit git ... pero ahora nos estamos volviendo locos.

+1

Al día de hoy ese enlace está roto (error 500), de modo que aquí es un [archivo] (https://gist.github.com/3854887) (gist.github. com/3854887) de esa publicación. – Sukima

+0

@Sukima Creo que el enlace está funcionando nuevamente. – Kostia

+1

Si los autores eliminan sus paquetes, lo que sucede, entonces 'shrinkwrap' no ayudará. –

2

NPM FAQ responde directamente a este:

  • Comprobar node_modules en git para cosas que implementar, tales como sitios web y aplicaciones.
  • No compruebe node_modules en git para bibliotecas y módulos destinados a ser reutilizados.
  • Use npm para administrar dependencias en su entorno dev , pero no en sus scripts de despliegue.

citado de npm FAQ

+3

Incluso las preguntas frecuentes pueden cambiar. Ahora se lee: "Para los paquetes que implemente, como sitios web y aplicaciones, debe usar npm shrinkwrap para bloquear su árbol de dependencias completo". – Johann

Cuestiones relacionadas