2013-05-17 8 views
5

statt require Code relativ, dh beginnend mit ./ oder .., würde ich gerne ein Modul "global" definieren. Nehmen wir zum Beispiel die folgende Paketstruktur:Wie definiert man eine Datei als Modul in node.js

/src 
    /index.js 
    /a.js 
    /b.js 
/lib 
    /index.js 
    ... 

Wenn in src/a.js oder src/b.js, zu lib benötigen, würde ich require('../lib') jedes Mal zu tun haben. Dies wird ärgerlich, wenn Sie mit der Verschachtelung beginnen, da Sie ../lib oder ../../lib oder ../../../lib manuell auflösen müssen.

Ich möchte require('lib') tun können. Darf ich das machen? Oder sollte ich nur Globals verwenden?

+1

gefunden: https://github.com/nadav-dav/rekuire, aber ich habe es nicht angesehen. –

+0

Wenn Sie der Umgebungsvariablen 'NODE_PATH' das übergeordnete Verzeichnis 'lib' hinzufügen, können Sie es als global installiert anfordern. – robertklep

+0

so im Grunde, ich kann nur meine cwd als 'NODE_PATH' und ich kann' 'lib ')'? –

Antwort

0

Vergebens Ihres Modul in node_modules nicht Sie benötigen einen Pfad oder einen relativen Pfad schließen

EDIT:

wenn Sie eine Datei namens platzieren package.json innerhalb Verzeichnis des Moduls, Knoten wird versuchen, diese Datei zu analysieren Suchen Sie nach dem Hauptattribut und verwenden Sie es als relativen Pfad für den Einstiegspunkt. Zum Beispiel, wenn Ihre

./myModuleDir/package.json

Datei etwa wie folgt aussieht, werden Knoten versuchen, die Datei mit dem Pfad

./myModuleDir zu laden /lib/myModule.js

:

{ 
"name" : "myModule", 
"main" : "./lib/myModule.js" 
} 

Wenn dieser Ordner keine Paketdefinitionsdatei namens package.json enthält, nimmt der Paketeintrittspunkt den Standardwert index.js an, und in diesem Fall sucht Node nach einer Datei unter dem Pfad ./ myModuleDir/index.js.

+0

dann kann ich den code nicht committen, weil ich node_modules in meinem .gitignore –

+0

-1 habe: node_modules ist nicht für diesen Zweck gemacht. Den Code in node_modules zu setzen ist sehr hässlich und schlecht. node_modules ist der Platz für Module von Drittanbietern. –

0

Wenn Sie einen nicht relativen Pfad verwenden, um Ihre Quelldateien anzufordern, ist es nicht erforderlich, dass die Anforderung von Knoten funktioniert! Versuchen Sie nicht, diese Einschränkung zu umgehen, indem Sie eine willkürliche Codedatei in das Verzeichnis node_modules oder eine Umgehungslösung platzieren, indem Sie die Umgebungsvariable NODE_PATH ändern.

Wenn Sie require ohne einen Pfad verwenden möchten, sollten Sie den erforderlichen Code als Knotenmodul extrahieren und von diesem Knotenmodul abhängig sein. Dies führt zu besser strukturiertem Code, weniger komplexen Modulen, verkapselter Funktionalität, besserer Testbarkeit und einfacherer Wiederverwendung von Code.

Sie können Paketabhängigkeiten von http oder git einschließen, sodass keine Knotenmodule veröffentlicht werden müssen, die Sie in npm verwenden. Werfen Sie einen Blick auf npm dependencies für weitere Details.

+0

Der Grund, warum ich diese Frage gestellt habe, war, weil ich nach einem Dep als Submodul gesucht habe ... aber ich habe schnell aufgegeben. Trotzdem interessiert mich die Antwort auf diese Frage. –

0

Verwenden Sie module.exports in der Datei index.js. und legen Sie es in den Ordner node_modules

+0

dann kann ich den code nicht commit, weil ich Knotenmodule in meinem .gitignore –

+0

Knoten-Ordner im Stammordner sein muss –

+0

Ich vermute, Sie wissen nicht, was gitignore ist –

0

Wenn relative Pfad Sie ärgern und Sie immer in Ihrer Anwendung lib verwenden möchten, können Sie global Variable wie folgt verwenden.

var lib = require('./lib'); 
global.lib = lib; 

können Sie lib auf globale Variable in der Einstiegspunkt gesetzt.Danach können Sie nur auf lib zugreifen. aber es verschmutzt globalen Geltungsbereich. also musst du vorsichtig damit umgehen.

Verwandte Themen