11
votes

Accéder à Node_Modules d'un autre dossier

a récemment commencé à travailler avec la gouffine et je ne peux pas comprendre que c'est vraiment nécessaire d'avoir une copie de Node_Modules directement dans le dossier avec le projet actuel? Par exemple. J'ai cette structure:

MySite
└─Builder
└──node_modules
└─work
└─work2

Comment puis-je accéder à nœud_modules dans le dossier "Builder" du dossier "Travail" ou "Work2" sans la copier? C'est assez grand, d'environ 100 Mo et me semble que cela n'a aucun sens de en avoir une copie pour chaque nouveau projet.

J'ai essayé cette ligne export node_path = 'd: \ openserver \ domaines \ mysite \ build' dans fichier fichier.json puis a essayé la commande gulp mais il a répondu < BR> [10:24:27] Local Gulp introuvable dans D: \ OpenServer \ domaines \ mysite \ travail [10:24:27] Essayez d'exécuter: NPM Installez Gulp


7 commentaires

Trouvé une solution partielle dans la mise en place des dossiers 'Work', 'Work2' ... Inside Dossier 'Builder' comme Node_Modules peut être reconnu dans le dossier parent.


Pourquoi mettez-vous node_modules à l'intérieur du constructeur?, pourquoi ne mettez-vous pas dans MySite directement?


Bien que cela ne soit pas recommandé, vous pouvez toujours utiliser le chemin relatif, c'est-à-dire exiger ('./ Builder / node_modules /....'j.)< / code>


@Deduardo Yáñez Parareda Hmm Je ne connaissais pas les logiques de la manière dont la recherche de nœuds_modules se déroule. Si je savais que cela recherche dans le répertoire parent aussi ... Mais c'est un problème d'accéder à un répertoire voisin / .. Eh bien, je ferai cela.


Il traverse le chemin du chemin du script actuel jusqu'à ce qu'il trouve node_modules / - si le répertoire n'existe pas lorsqu'il atteint la racine, elle échoue. exiger () accepte également un chemin, qui commence par ./ ou juste / . Dans ce cas, cela traite comme un chemin de fichier. Gardez à l'esprit, NPM et Node.js sont deux systèmes distincts. La convention nœud_modules / est une chose nœud.js, et la convention package.json est une chose NPM.


Cela a également été une discussion en cours sur le référentiel NPM sur GitHub. Il est une cache de modules qui vit dans votre répertoire de domicile, bien que tout soit actuellement copié de toute façon. À mon avis, les modules devraient être liés à ce répertoire, qui est une opération de temps constante. Mais les propriétaires de NPM ne semblent pas être d'accord :)


Stackoverflow.com/Questtions/32260534/...


4 Réponses :


1
votes

Peut-être que vous devriez mettre votre colis.json dans votre répertoire racine (mySite / package.json),
Ensuite, essayez d'installer node_modules sur la racine.
De plus, vous écrivez Gulpfile sur le même dir.

EG. P>

mysite  
|- package.json  
|- node_modules  
|- gulpfile.js  
└─builder  
└─work  
└─work2


1 commentaires

Merci. Cela devient plus clair pour moi maintenant. Je pense que la meilleure solution pour ma situation est de mettre node_modules dans mysite , puis crée des sous-répertoires de mysite avec propre package.json et gulpfile.js



4
votes

réponse courte

ne le fais pas. Laissez NPM fonctionner comme il est conçu. Cependant, pour économiser de l'espace, vous pouvez supprimer le dossier Node_Modules sur des projets qui sont actuellement en sommeil et le recréer avec un seul coup de NPM install lorsque vous les retournez.


Justification

Même si vous partagez votre nœud_modules, vous aurez probablement des licenciements de toute façon. Que ferez-vous à leur sujet sur eux suivant?

C'est l'essence de la NPM de reproduire des modules par projet. Si vous creusez dans l'arborescence de dossiers Node_Modules, vous pouvez remarquer qu'il peut même contenir plusieurs réplications d'une même bibliothèque sous une seule arborescence de dépendances. Dites que vous avez demandé deux modules explicitement, et ces deux modules eux-mêmes ont elles-mêmes tiré une dépendance qui prend soin de beaucoup de choses et est donc appelée lib_daddymummy : xxx p> Ceci est utile lorsque votre module a besoin d'avoir besoin de différentes versions de lib_daddymummy . Cela est utile lorsque vous maintenez des projets de longue durée de vie! Et l'enfer sait que dans le monde JavaScript, avec des API à changement rapide, vous pouvez envisager la plupart des projets décents comme vécus de longue date. :)

On pourrait imaginer que toutes les dépendances sont partagées par tout le monde, vivant dans une structure plate, avec plusieurs versions d'une bibliothèque vivant côte à côte et chacun en train de trouver ce qu'il a besoin là-bas. Ce référentiel pourrait être appelé, disons, .m2 . Mais ce n'est tout simplement pas la façon dont NPM fonctionne malheureusement.

NPM considère que l'espace de stockage est bon marché. C'est son prix pour vous aider à gérer des versions dans des dépendances, des dépendances des dépendances et des dépendances des dépendances des dépendances. Je considère que c'est un prix abordable pour prendre soin des tâches sales le jour où travail et travail2 , comme leur vie continue, prenez des chemins de maintenance divergents. Je n'essaierais pas d'entrer en bonne forme en forçant un modèle de dossier à demi maven.


5 commentaires

Merci :) Oui, je comprends. Probablement divers projets complexes nécessitent des modules de nœuds propres pour chacun. Mais je dois surtout avoir des tâches similaires en gulp pour plusieurs projets frontaux, comme la compilation de Sass, l'optimisation des images, la fusionner plusieurs fichiers dans une etc ... N'est-il pas préférable de partager une node_modules à tous ces projets similaires?


Au début, c'est. Et si votre projet a tous la même structure, et toujours tout restent les mêmes, alors ce sera comme ça. Toutefois, si fonctionne et work2 fusion de fichiers dans des arbres sources très différents et une année sur la route Work2 a été maintenu et utilise maintenant de nouvelles sasses Caractéristiques tandis que Work s'appuie sur des instructions OK lorsque vous l'avez écrit, mais que les gars Sass ont décidé étaient obsolètes, vous aurez des problèmes et faire face à beaucoup de frais de maintenance inutiles. :)


Merci mais cette solution n'est pas la meilleure pour moi ... :) Parce que NPM installer prend beaucoup de temps. Ne vaut pas si je devais juste faire un petit changement dans un seul fichier. Je vois ici beaucoup d'avertissements pour ne pas partager une nœud_modules pour plusieurs projets ... mais je vais essayer: D Eh bien, si je ferai face à des problèmes à l'avenir, ce sera de l'expérience que je ne devrais pas être si têtue: D Mais maintenant Il me semble que c'est la meilleure solution pour un accès rapide à des projets similaires et en créant de nouveaux.


L'obstination est une qualité, jusqu'à ce que l'on devienne obstinément têtu. ;) Prends soin !


Chaque fois que chaque fois la copie de 100 Mo dans un autre dossier ou les dépenses de 10 minutes d'installation de zéro est la gaspillage d'espace / temps.



1
votes

Un problème pourquoi vous ne devriez pas le faire est à cause de la version de la version. Si vos modules nécessitent différentes versions du même paquet, vous allez rencontrer des problèmes. Un paquet va gagner, et cela pourrait casser un autre paquet.

En outre, vous avez le problème de devoir fusionner les listes de dépendance d'une manière - ce qui signifie que vous devrez obtenir les dépendances de travail / package.json , travail2 / paquet.json , etc., puis les installe tous à la fois.

fusion nœud_modules / ne résoudra pas votre problème, non plus - croyez-moi, n'essayez pas.


2 commentaires

OK, mais au moins lorsque deux projets nécessitent tous les mêmes modules, pourquoi ne pas donner le même dossier de modules à la fois?


@Julia parce qu'il est difficile de gérer cela. Le deuxième des deux modules nécessite une autre dépendance, le package.json diverge.



0
votes

Coller le dossier nœud_modules à l'intérieur de votre mySite .

Tous les packages NPM tels que gulp fonctionneront dans votre travail ou work2 .

Mais, maintenant (votre structure de dossiers) Les dossiers de travail ne peuvent pas trouver nœud_modules dans leur répertoire parent.


0 commentaires