2017-03-01 6 views
0

Ich entwickle eine Bibliothek, wo Ich möchte eine oder mehrere Dateien relativ zum Requirer laden. Um dies besser zu veranschaulichen:Wie benötigt man eine Datei relativ zum Requirer?

// ~/app.js 
import { horn } from 'unicorn' 
horn.load() 

// ~/node_modules/unicorn/horn.js 
export default { 
    load() { 
    require('./user.config.js') // Here I would like to load the user config 
           // relative to "~/app.js" 
    } 
} 

Ich habe versucht, die globalen require und seine parent Eigenschaft Inspektion, aber es gibt mir nur einen Dateinamen ohne mehr Kontext.

Antwort

1

Hier ist, was Sie zur Verfügung haben:

module.parent 

Dies ist der Modulgriff des ersten Moduls dieses Modul zu laden. Da Modulhandles zwischengespeichert werden, spiegelt dies nur das erste Modul wider, das Sie geladen hat.

module.filename 

Dies ist der vollständig qualifizierte Dateiname eines Moduls. Also, wenn Sie den vollständigen Dateinamen des übergeordneten Modul möchten, können Sie diese verwenden:

module.parent.filename 

Wenn Sie nur den Pfad des übergeordneten Modul wollen, so dass Sie etwas aus diesem Verzeichnis laden konnte, dann können Sie spalten Aus dem Pfad vom Dateinamen, um nur den Pfad mit dem path Modul zu erhalten.

path.dirname(module.parent.filename) 

Wenn Sie eine Datei aus diesem Verzeichnis laden möchten, können Sie dies tun:

let fileToLoad = path.join(path.dirname(module.parent.filename), "user.config.js"); 
let config = require(fileToLoad); 

Sie müssen den Vorbehalt erinnern darüber module.parent nur das erste Modul kehrt zum Laden Sie, weil danach das Modul zwischengespeichert wird und nur das ursprüngliche Modul-Handle zurückgegeben wird (es wird nicht neu geladen).

+0

Super! Danke für die Details und das Wort des Rates. Ich werde versuchen, wenn ich etwas Zeit habe, dann werde ich zurückkommen, um die Antwort zu akzeptieren. –

+0

@RubensMariuzzo - Konnten Sie das ausprobieren? Hat es für dich funktioniert? Ist es angebracht, die beste Antwort zu markieren, um der Gemeinde zu zeigen, dass die Frage jetzt erledigt ist? – jfriend00

+0

Ich habe noch nicht überprüft, aber ich werde es tun. Ich wurde mit anderen Sachen abgesaugt. Es tut uns leid! –

Verwandte Themen