Das Stammverzeichnis meines Node-Projekts befindet sich in einem Verzeichnis, das selbst ein Stamm eines anderen Node-Projekts ist. So enthalten beide Ordner package.json
und node_modules
. Das Problem ist, dass im inneren Projekt, manchmal ich require
Module nicht in diesem Projekt installiert sind. Aber Node findet sie nur still im node_modules
des übergeordneten Projekts, was zu ärgerlichen Überraschungen führt. Kann ich das irgendwie verhindern? Ich möchte die Verzeichnisstruktur der Projekte nicht ändern, außer es ist die einzige Lösung.Verhindern, dass (...) nach Modulen im übergeordneten Verzeichnis sucht
6
A
Antwort
6
Node versucht, den aktuellen Modulpfadnamen aufzulösen und verkettet node_modules
mit jedem seiner übergeordneten Verzeichnisse. [Source].
Sie können diese Methode oben im Projektmodul überschreiben und Logik hinzufügen, um die übergeordneten Verzeichnisse vom Array des Ergebnispfads auszuschließen.
//app.js <-- parent project module, should be added at the top
var Module = require('module').Module;
var nodeModulePaths= Module._nodeModulePaths; //backup the original method
Module._nodeModulePaths = function(from) {
var paths = nodeModulePaths.call(this, from); // call the original method
//add your logic here to exclude parent dirs, I did a simple match with current dir
paths = paths.filter(function(path){
return path.match(__dirname)
})
return paths;
};
inspiriert von this module
benötigen Sie den Pfad Baum nicht durchqueren werden. Können Sie Ihre Dateistruktur posten? –
Siehe https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders – thorn
Das ist nicht Ihre Ordnerstruktur. –