2015-09-08 5 views
6

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

+0

benötigen Sie den Pfad Baum nicht durchqueren werden. Können Sie Ihre Dateistruktur posten? –

+0

Siehe https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders – thorn

+0

Das ist nicht Ihre Ordnerstruktur. –

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