Les dépendances de Node.js pèsent trop

9

Récemment, j'ai commencé à jouer avec node.js.

Maintenant, chaque tutoriel sur les nœuds indique que vous devez commencer par

npm init

puis, disons que vous voulez un framework de serveur standard, dites que vous choisissez express:

npm install express

mais alors vous voudrez bien plus de choses auxquelles vous êtes habitué dans des mondes comme ASP.NET.

Je parle des moteurs de template (jade) et des pré-processeurs de feuille de style (SASS).

Et puis ils vous disent "installez gulp / grunt! Afin que vous puissiez minimiser et uglifier et exécuter le serveur et tant d'autres choses automatiquement!"

Et cela signifie installer gulp, node-sass, et gulp-sass, et gulp-uglify, et peut-être quelque chose de vraiment plus cool (tsd ou babel, démarquage, etc.) ...

Mais tout cela est lourd sur votre disque et votre projet. Ne cherchez pas un instant et vous pouvez facilement vous retrouver avec une taille de disque de 100 Mo + pour ce projet (qui n'a même pas encore commencé!) Sans parler de plus de 10000 fichiers puisque chaque module de nœud apporte ses propres dépendances, peu importe la même chose la dépendance est utilisée par un autre module. Et c'est une chose très difficile à déplacer n'importe où, sans parler d'un serveur Web.

Suis-je en train de manquer quelque chose? Je ne pense pas qu'il soit possible que tant d'éloges soient donnés à l'environnement du nœud alors qu'un défaut aussi clair existe. Est-ce que j'attends trop (après tout, j'ai essayé d'utiliser de nombreux outils à la fois), les vétérans de Node ont-ils quelque chose de trivial à contourner?

Ou Yaniv
la source
2
tout à fait d'accord, j'ai été étonné de voir l'arborescence npm pour certains projets frontaux. Je suppose que dans le monde .net, vous avez la même chose, mais ils sont tous compilés en binaires, donc vous ne le remarquerez pas
Ewan
2
Malheureusement, ce n'est pas vraiment une question spécifique et répondable, donc elle sera probablement fermée bientôt. Ce que je peux vous dire, c'est que 1) alors que tous ces outils supplémentaires sont utiles pour quelque chose, les petits projets n'ont tout simplement pas besoin de la plupart d'entre eux 2) tous les autres cadres de programmation avec des fonctionnalités similaires viendront avec une quantité similaire de choses (regardez simplement aux téléchargements JRE ou .NET), la seule différence est la quantité de ce dont vous avez besoin fait partie de la distribution "par défaut" et combien vous devez aller trouver dans d'autres packages 3) 100 Mo sur votre machine de développement n'est rien
Ixrec
1
@Ixrec bien sûr, c'est responsable, vous venez de le faire (ou avez essayé de le faire) :). Mais alors, je pourrais faire valoir vos affirmations: 1) cela ne doit pas être un petit projet - considérez un projet avec plusieurs vues avec leurs propres fichiers js et feuilles de style. c'est assez pour vous donner envie d'avoir sass, cssnano et uglify. aussi assez pour vous donner envie d'exprimer, de jade et un peu plus. 2) J'ai eu un projet .net décent qui n'est pas devenu aussi lourd (et nulle part autant de fichiers). 3) peut-être que les machines de développement modernes prennent cela facilement, mais cela pèse également sur le serveur, et c'est un peu plus préoccupant. Ai-je tort?
Ou Yaniv
2
@OrYaniv En effet, vous êtes en train de prouver mon point de vue: c'est le genre de problème qui peut être discuté , mais sans réponse, car il est tout simplement trop large et dépend trop fortement des projets que vous faites et des dépendances que vous semblez avoir besoin. Soit dit en passant, les discussions se passent parfaitement bien dans le chat . Ou sur Quora.
Ixrec
3
Bienvenue dans le monde merveilleusement gonflé "tout ou rien" de node.js, qui n'est en fait ni plus facile ni meilleur que ce que vous avez utilisé auparavant.
Traubenfuchs

Réponses:

3

Le récent problème de gauche pad est un excellent exemple du problème avec cette tendance dans Node. Lorsque vous dépendez de trop de choses, toutes sont sujettes au ka-pow, rendent votre projet plus difficile à déboguer et, pour un nouveau venu, plus difficile à saisir le fonctionnement de la langue.

Les bons programmeurs Node.js savent maintenant écrire des applications minimalistes, en ce qui concerne les dépendances. Le moins de choses dont vous dépendez - mieux c'est. Besoin de garnir les cordes à gauche? Codez-le dans une aide, c'est 11 lignes de code avec les blancs. Besoin de numéroter vos rangées de chaînes? Codez-le, c'est moins de 100 lignes de code.

Même pour des tâches plus compliquées, comme la gestion de projet, je suggère de s'en tenir à Makefiles alors que votre projet est assez simple - grognement et gorgée sont vraiment, vraiment utiles pour les projets géants qui ont beaucoup de travail à faire. Mais pour votre blog SPA? Écrivez un Makefile, cela prend 5 minutes et vous savez comment cela fonctionne.

La tentation de simplement parcourir npm chaque fois que vous avez besoin d'écrire 3 lignes de code est grande, mais il faut y résister, chaque fois que cela est raisonnable. N'incluez pas jQuery si vous avez 3 manipulations DOM, n'utilisez pas angular pour cette page de promo statique, n'utilisez pas express pour un serveur simpliste. Mais vous codez un CMS? Il faudrait être fou pour ne pas utiliser de packages comme jQuery, underscore et ce qui ne l'est pas. Travailler avec 10 types de collection, 3 dbs et les interroger tout le temps? Vous seriez fou de ne pas utiliser de soulignement et quelques autres. Pensez simplement «est-ce que je gagne assez de temps en installant ce package? ou 'Je ne peux pas simplement coder cela pendant une demi-heure environ?'

BorisStoyanovv
la source
1
Sur une autre note, faut-il vraiment 100 lignes de code Javascript pour ajouter des numéros de ligne à une chaîne?
Robert Harvey
Hahahah, je n'avais pas vraiment pensé à une implémentation réaliste de la numérotation des lignes, parce que ... je ne vois pas vraiment la nécessité d'une telle chose, encore moins comme un package.
BorisStoyanovv
Vous pourriez probablement couper cette ligne en deux en la laissant simplement être exprimée. C'est vraiment un problème simple à résoudre. (Et c'est un liner dans un langage comme un schéma, et probablement python maintenant que j'y pense)
Shayne