Las dependencias de Node.js pesan demasiado

9

Recientemente comencé a jugar con node.js.

Ahora, cada tutorial de nodo por ahí establece que debe comenzar con

npm init

y luego, digamos que desea un marco de servidor estándar, digamos que elige express:

npm install express

pero entonces querrás muchas más cosas a las que estás acostumbrado en mundos como ASP.NET.

Hablo de motores de plantillas (jade) y preprocesadores de hojas de estilo (SASS).

Y luego te dicen "¡instala gulp / grunt! ¡Para que puedas minificar y uglify y ejecutar el servidor y tantas otras cosas automáticamente!"

Y eso significa instalar gulp, node-sass, y gulp-sass y gulp-uglify, y tal vez algunas cosas más geniales (tsd o babel, markdown, etc.) ...

Pero todos esos son pesados en su disco y proyecto. No busque un momento y puede encontrarse fácilmente con un tamaño de disco de 100 MB + para ese proyecto (¡que aún no ha comenzado!) Sin mencionar más de 10000 archivos ya que cada módulo de nodo tiene sus propias dependencias, sin importar lo mismo La dependencia es utilizada por otro módulo. Y esto es algo muy difícil de mover a cualquier parte, y mucho menos a un servidor web.

¿Me estoy perdiendo de algo? No creo que sea posible que se elogie tanto el entorno del nodo mientras exista una falla tan clara. ¿Espero demasiado (después de todo, intenté usar muchas herramientas a la vez), ¿hay algo trivial conocido por los veteranos de Node para evitar esto?

O Yaniv
fuente
2
totalmente de acuerdo, me sorprendió ver el árbol npm para algunos proyectos front-end. Supongo que en el mundo .net tienes lo mismo, pero todos están compilados en binarios para que no te des cuenta
Ewan
2
Desafortunadamente, esta no es realmente una pregunta específica y responsable, por lo que probablemente se cerrará pronto. Lo que puedo decirte es que 1) si bien todas esas herramientas adicionales son útiles para algo, los proyectos pequeños simplemente no necesitan la mayoría de ellas 2) todos los demás marcos de programación con una funcionalidad similar vendrán con una cantidad similar de cosas (solo mira en las descargas de JRE o .NET), la única diferencia es cuánto de lo que necesita es parte de la distribución "predeterminada" y cuánto tiene que buscar en otros paquetes 3) 100 MB en su máquina de desarrollo no es nada
Ixrec
1
@Ixrec, por supuesto, es responsable, solo lo hiciste (o intentaste) :). Pero entonces, podría argumentar sus afirmaciones: 1) este no tiene que ser un proyecto pequeño; considere un proyecto con varias vistas con sus propios archivos js y hojas de estilo. eso es suficiente para que quieras tener sass, cssnano y uglify. también lo suficiente como para hacerte querer express, jade y un poco más. 2) Tenía un proyecto .net decente que no se volvió tan pesado (y en ninguna parte tantos archivos). 3) tal vez la máquina de desarrollo moderna tome esto con facilidad, pero eso también pesa en el servidor, y eso es un poco más preocupante. ¿Me equivoco?
O Yaniv el
2
@OrYaniv De hecho, estás demostrando mi punto: este es el tipo de problema que puede discutirse , pero no responderse porque es demasiado amplio y depende demasiado de exactamente qué proyectos estás haciendo y qué dependencias pareces. necesitar. Por cierto, las discusiones están completamente bien en el chat . O en Quora.
Ixrec
3
Bienvenido al mundo maravillosamente hinchado "todo o nada" de node.js, que en realidad no es más fácil ni mejor que lo que haya usado antes.
Traubenfuchs

Respuestas:

3

El reciente problema del panel izquierdo es un excelente ejemplo del problema con esta tendencia en Node. Cuando depende de demasiadas cosas, todas son propensas a convertirse en ka-pow, hacer que su proyecto sea más difícil de depurar y, para un recién llegado, más difícil de comprender el funcionamiento del lenguaje.

Ahora los buenos programadores de Node.js saben escribir aplicaciones minimalistas, en lo que respecta a las dependencias. Cuantas menos cosas dependas, mejor. ¿Necesita acolchar las cuerdas a la izquierda? Codifíquelo en un ayudante, son 11 líneas de código con los espacios en blanco. ¿Necesita numerar sus filas de cuerdas? Codifíquelo, tiene menos de 100 líneas de código.

Incluso para tareas más complicadas, como la gestión de proyectos, sugeriría seguir con Makefiles mientras su proyecto es lo suficientemente simple: gruñir y tragar son realmente muy útiles para proyectos gigantes que tienen mucho trabajo pesado por hacer. ¿Pero para tu blog SPA? Escriba un Makefile, toma 5 minutos y ya sabe cómo funciona.

La tentación de navegar por npm cada vez que necesita escribir 3 líneas de código es excelente, pero debe resistirse siempre que sea razonable. No incluya jQuery si tiene 3 manipulaciones DOM, no use angular para esa página de promoción estática, no use express para un servidor simplista. ¿Pero estás codificando un CMS? Tendría que estar loco para no usar paquetes como jQuery, subrayado y lo que no. ¿Trabaja con 10 tipos de colección, 3 dbs y los consulta todo el tiempo? Sería una locura no utilizar guiones bajos y algunos otros. Simplemente piense '¿Ahorro suficiente tiempo al instalar este paquete?' o '¿No puedo codificar esto durante media hora más o menos?'

BorisStoyanovv
fuente
1
En otra nota, ¿realmente se necesitan 100 líneas de código Javascript para agregar números de línea a una cadena?
Robert Harvey
Jajaja, realmente no había pensado en una implementación realista de numeración de líneas, porque ... Realmente no veo la necesidad de que exista tal cosa, y mucho menos como un paquete.
BorisStoyanovv
Probablemente podría cortar esa línea por la mitad simplemente dejándola obstinada. Realmente es un problema simple de resolver. (Y es un trazador de líneas en un lenguaje como esquema, y ​​probablemente Python ahora que lo pienso)
Shayne