Bonjour fdolin,
J’imagine que, quand tu fais référence à un module Node.js, tu fais référence à un module « npm ». Ces modules sont un ensemble complet de code JavaScript bas niveau. C’est ce bas niveau qui nous intéresse ici. Cela signifie concrètement que, tout module peut avoir, une ou plusieurs dépendances à d’autres modules pour fonctionner et ceci dans un seul but : **fournir un unique point de sortie disponible dans index.js
et devenir à son tour une dépendance d’un autre projet. Ainsi depuis un module tiers, en installant ton module npm install plop
j’ai accès via mon code à plop
dont le point d’entré est stocké dans ./node_modules/plop/index.js
(sauf contre directive inclus dans le ./node_modules/plop/package.json
qui dirait que la porte d’entrée c’est ./node_modules/plop/plop.js
par exemple).
Cela veut donc dire que si une tel possibilité existait, elle ne se présenterait surement pas sous forme de widget, puisqu’on parle ici de code bas niveau. Ça se présenterait plutôt sous une forme qui te permettrait, après avoir écrit :
var plop = require('plop');
de te demander, si le node_modules
n’est pas trouvé en dépendance, de l’installer immédiatement et de l’ajouter à la liste des dépendances (ou dev-dépendance) du package.json
. En faisant un clique droit sur cette ligne de code, tu pourrais éventuellement mettre à jour ou télécharger le modules, si tu avais précédemment annulé la récupération.
J’imagine que des IDEs et plugins fournissant une tel possibilité existe partout. Sur Sublim text, je download manuellement à la ligne de commande ce que j’ai besoin en amont.
Une interface de widget pour « drag & dropper » des modules les uns dans les autres pour avoir une arborescence de module n’a pas de sens car in-fine, npm gère « à plat » la liste de tes dépendances dans node_modules
à partir du module couramment en développement et ce qui dicte réellement la nécessité d’avoir un module…
…c’est ton code.
Aussi « l’arborescence » dont tu parles n’est que « poudre au yeux ». Toi, en tant que développeur, tu crées un nouveau projet, et tu te sers dans le code des require
dont tu as besoin, ce qui créé un node_modules
de la totalité des dépendances de dépendances de dépendance… à plat en fonction de ton code à toi. Si il s’avère que ton projet peut fournir une API, tu vas à ton tour exporter quelque chose via index.js
au cas ou quelqu’un se servirait à son tour de ton projet… dans le sien ! (ce qui signifie qu’il devra être sur un npm-like (ou sur npm) serveur).
À son tour quand il créera un module qui dépend du tiens, toutes les dépendances au tiens se trouverons dans son node_modules
global à plat (exception faites d’un même module, mais dans une version différente qui pourrait se retrouver à un niveau plus bas, mais au final, la manière dont node_modules
est géré te regarde pas).