2017-01-02 4 views
-1

Ich mache Console-Dienstprogramm, die einen Pfad zur Konfigurationsdatei als ein Konsolenargument akzeptiert.Wepback erfordern von Variable

F.e: utility -f

/path/to/file.js Ich brauche diese Datei benötigen Konfiguration zu lesen. Ist es möglich, dies mit dem Webpack zu handhaben? Wie ich verstehe, kann der Kontext mir in dieser Situation nicht helfen.

Danke.

P.S. Ich benutze bereits Webpack.

P. S Solution ist etwas zu verwenden, wie: eval (‚require‘) (dynamicPath)

+0

ich Ihnen für diese webpack einfach nicht denken müssen - sollten Sie es verlangen können, nachdem Sie 'Zugriff process.argv' – Barnabus

+0

ich schon bin mit Webpack in diesem Projekt. Ich brauche nur eine Konfigurationsdatei. – zim32

+0

Ok - ich werde eine ausführlichere Erklärung in einer Antwort unten hinzufügen :) – Barnabus

Antwort

0

Webpack ein dynamisches nur tun kann, wie dies erforderlich, wenn die Datei benötigt werden, zum Zeitpunkt der Kompilierung zur Verfügung steht. Zum Beispiel, wenn Sie einen „dynamischen“ Dateipfad erfordern, wie

require('./assets/images/' + someVariable + '.png') 

Dann unter der Haube wird Webpack umfassen alle Bilder dieses Muster in den mitgelieferten erfordern Code entsprechen. Es wird im Grunde alle Dateien enthält die regex passend:

/.\/assets\/images\/*.png/ 

würde ich wahrscheinlich versuchen, die Config-Datei in einem bestimmten Ordner setzen, und auf diesem Ordner benötigen ein:

require('./configs/' + process.env.CONFIG_NAME); 

Auf diese Weise Webpack nur schließen Alle Dateien im Ordner .

Die Dokumentation zu Webpack ist schrecklich, aber es gibt weitere Informationen on the dynamic requires page.

+0

Ah ..Ich habe sogar versucht, etwas wie last = require zu machen; laden (dynamicPath); Aber es ist schlau genug) – zim32

+0

Das hilft: eval ('require') (dynamicPath) – zim32

0

Wenn Sie eine Konfigurationsdatei als Argument an einen Knotenprozess übergeben, können Sie auf das Array der Befehlszeilenargumente zugreifen. Ich weiß nicht, ob Sie ein anderes Framework (wie das ausgezeichnete commander) verwenden, um Befehlszeilenprogramme zu erstellen, aber wir können das Array einfach zerlegen, um das zu finden, was wir brauchen.

Um einen Pfad aus dem Verzeichnis, in dem das Skript gestartet wird, aufzulösen, können Sie process.cwd() verwenden - dies gibt einen absoluten Pfad zum Arbeitsverzeichnis des Knotenprozesses zurück.

Schließlich können Sie path.resolve(processPath, configPath) (docs) verwenden, um einen Pfad zu generieren, der immer garantiert in die Config aufgelöst wird. Sie können dann diesen Pfad anfordern.

Sie müssen dies wahrscheinlich zuerst tun. Der Anfang der Datei wie folgt aussehen könnte:

/* relevant require() calls for necessary modules */ 
var path = require('path'); 

// first two arguments are node process and executed file 
var args = process.argv.slice(2); 

var configIndex = args.findIndex('-f') + 1; 
var configPath = path.resolve(process.cwd(), args[configIndex]); 

var config = require(configPath); 

/* the rest of your code */ 
+0

Ich glaube nicht, dass dies mit der Frage, die Erstellung eines dynamischen Dateipfads in ein Webpack-Bundle betrifft –

+0

Die Frage bezieht sich auf zu machen ein Konsolendienstprogramm, das den Pfad der Konfigurationsdatei als Argument verwendet und wie man dies in Ihrem Code benötigt - so scheint es mir. Natürlich hängt es davon ab, was das Dienstprogramm macht und wofür die Konfiguration ist. – Barnabus

+0

Ja, das Problem ist mehr über es gibt keine triviale Möglichkeit zu schreiben erfordern (FilePath) mit Webpack. Es versucht immer, diesen Pfad aufzulösen, was zu einem Kontext führt. – zim32