La taille du dossier node_modules n'est pas un problème. C'est un privilège

Mes réflexions sur le débat sur la taille du dossier node_modules

J'étais en colère contre lenode_modulestaille du dossier. Comment une application JavaScript peut-elle avoir une taille de 100, 200 Mo sans même que j'ajoute de ligne de code? Je viens de courirnpx create-react-app todolistet j'ai téléchargé 218,7MB dedes trucs! (Je viens de le vérifier maintenant, c'est un vrai nombre).

Chaque fois que vous pensez à la taille de node_modules, pensez aux millions d'heures de travail que nous, les programmeurs, y consacrons.

Ce sont tous des logiciels Open Source. Logiciel que vous pouvez inspecter et à partir duquel vous pouvez apprendre. Aimablement offert par les programmeurs et les entreprises du monde entier. C'est un effort mondial dont quelqu'un a fait très simplement profiter. Il s'est avéré que c'étaitnpm, l'outil d'abord, et l'entreprise ensuite.

Nous avons tous accepté de publier notre code sur leurs serveurs, et les gens ont construit des choses par-dessus, d'autres choses par-dessus, jusqu'à ce que nous soyons arrivés au point que nous avions des démarreurs rapides (comme create-react-app ou la CLI Vue par exemple) que nous peut utiliser pour obtenir gratuitement beaucoup de puissance

Est-ce que 200 Mo est trop à l'ère du stockage rapide de l'ordre de TB?

Gardez à l'esprit que la grande majorité de cette taille est constituée de tests, de documentation, etc. De plus, la grande majorité du code restant n'est utilisée que dans l'environnement de développement. Ce n'est pas comme si vous serviez une application de 200 Mo au client, je pense que c'est bien compris.

J'ai pris l'exemple de create-react-app. Qu'y a-t-il dans ces 200 Mo?

Pour commencer, create-react-app contient

  • un compilateur (Babel)
  • un bundler (Webpack)
  • un minificateur de code
  • un linter (ESLint)
  • un outil de pipeline de style (SCSS)
  • un serveur de développement avec rechargement en direct
  • un testeur (Jest)

Si vous souhaitez écrire une application Mac ou iPhone, vous devez installerXcode, l'IDE fourni par Apple.Xcodeest (attendez ...) presque 14 Go de taille. C'est 70 fois la taille de node_modules. Certes, nous comparons deux choses différentes, mais node_modules contient tout ce dont vous avez besoin pour commencer à travailler sur votre code. Vous pouvez le coupler avec VS Code d'une taille de 200 Mo, ou avec Sublime Text qui fait 30 Mo - peu importe, personne n'est même strictement requis (alors que vous ne pouvez pas créer une application iOS / macOS sansXcode).

Si le problème est que votre disque dur se remplit de modules,pnpmest une solution de remplacement optimale qui centralise les modules en un seul endroit et toutes vos applications utilisent ces modules au lieu de créer leur propre version locale. Il est utilisé par des outils de codage en ligne commeProblèmepar exemple.

J'ai lu des gens se demander comment ils peuvent auditer la base de code pour des problèmes de sécurité ou d'autres problèmes si nos applications reposent sur trop de code écrit par d'autres.

C'est un choix, non? Vous n'êtes pas obligé d'utiliser des modules. Vous pouvez créer votre propre version d'outils qui ne nécessite pas tous ces modules, mais vous devrez ensuite maintenir ce code, le tester, gérer les nouvelles versions lorsque les choses doivent être mises à jour, etc.travailler.

J'ai eu l'occasion de travailler avec d'autres langages et un écosystème où le dynamisme et les opportunités de npm auraient été une bénédiction, et au lieu de cela, j'ai dû créer ma propre petite bibliothèque pour tout, car les choses que j'ai trouvées distribuées par les développeurs tiers l'étaient. soit inexistante, soit abandonnée depuis quelques années, et non mise à jour avec le reste de la langue.

Peut-être que nous pourrions avoir un indicateur pour télécharger uniquement le code de production plutôt que toute la documentation, les tests, etc. Mais c'est juste une idée qui m'est venue à l'esprit maintenant, je ne sais pas comment cela serait faisable.

Quoi qu'il en soit: vive,node_modules!

Téléchargez mon gratuitManuel du débutant JavaScript


Plus de tutoriels js: