2016-06-15 12 views
0

Ich bin ziemlich neu in Knoten, und das ist wahrscheinlich ein ziemlich einfaches Problem.Wie exportiert man mehrere Module aus einem Paket?

Nehmen wir an, ich habe ein Paket mypackage. Im package.json meiner Paket habe ich die main Schlüssel definiert:

... 
"main": "./dist/index.js", 
... 

Im dist Ordner gibt es ein weiteres Modul tools.js

Sobald mypackage installiert ist, kann ich laufen Knoten auf den Ordner, und führen Sie das genannt ist folgende:

> require('mypackage') 

Das funktioniert perfekt. Allerdings, wenn ich versuche, das tools Modul zu importieren, ich laufe in diesen:

> require('mypackage/tools') 

Error: Cannot find module 'mypackage/tools' 
    at Function.Module._resolveFilename (module.js:438:15) 
    at Function.Module._load (module.js:386:25) 
    at Module.require (module.js:466:17) 
    at require (internal/module.js:20:19) 
    at repl:1:1 
    at REPLServer.defaultEval (repl.js:272:27) 
    at bound (domain.js:280:14) 
    at REPLServer.runBound [as eval] (domain.js:293:12) 
    at REPLServer.<anonymous> (repl.js:441:10) 
    at emitOne (events.js:101:20) 

Allerdings funktioniert es, wenn ich die dist Ordner angeben:

> require('mypackage/dist/tools') 

Aber das ist nicht das, was ich möchte meine Benutzer zu tun. Welcher Projektstruktur sollte ich folgen, wenn ich sowohl src als auch dist habe und möchte, dass Nicht-Hauptmodule mit mypackage/otherMod erreichbar sind? Vielen Dank.

Antwort

0

weil Sie immer noch im übergeordneten Verzeichnis.

inside "dist/index.js" Sie

process.chdir(__dirname); 

Update tun können: Sie können diese umfassen die Verwendung. Inside index.js do:

require('./tools.js'); 
+0

Der erste Ansatz bedeutet, dass das Importieren meines Pakets würde automatisch die PWD des Node-Prozesses ändern, was ich denke, es ist eine schlechte Idee. Der zweite würde funktionieren, aber 'tools' wären als Objekt in' index' verfügbar, und ich möchte, dass 'tools' als ein separates Modul verfügbar gemacht wird. – bgusach