2016-08-09 35 views
0

Ich baue eine App mit mehreren Sub-Apps. Die Dateistruktur ist wie folgt:Ein node_modul von oberhalb des aktuellen Verzeichnisses laden

├── app1 
│   ├── app.js 
│   ├── node_modules 
│   └── package.json 
├── shared 
│   └── foo.js 

In app.js, ich lade foo.js wie folgt aus:

require('../shared/foo'); 

Und in foo.js ich versuche, ein npm Modul zu verwenden, body-parser, wie folgt aus:

var bodyParser = require('body-parser'); 

Dies ist ein "Kann Modulfehler nicht finden" - body-parser ist in derinstalliertVerzeichnis, aber foo.js sucht offensichtlich in einem eigenen Verzeichnis und findet es nicht.

Gibt es eine Möglichkeit, einen require() Aufruf zu nennen, das Arbeitsverzeichnis der Datei zu verwenden, von der es aufgerufen wird, anstatt von seinem eigenen Verzeichnis? Oder muss ich eine zweite package.json innerhalb /shared haben, um dieses Verhalten zu ermöglichen?

In foo.js ich meine require() Anrufe geändert wie folgt aussehen:

Antwort

0

ich einen Ansatz über this Gist gefunden landete mit

var bodyParser = require(__base + 'body-parser'); 

Und in app.js (die lädt foo.js), habe ich dies zu die Oberseite:

global.__base = __dirname + '/node_modules/'; 

Es ist nicht schön, aber es funktioniert.