2017-01-17 6 views
0

Ich versuche ein Webpack-Plugin zu schreiben, das in ein Verzeichnis mit HTML-Dateien geht, jedes öffnet, neue Zeilen entfernt und ein Objekt erzeugt, das als statische Eigenschaft an meine Ausgabe angehängt wird Datei (die eine Var ist).Webpack-Plugin zum Anhängen eines statischen JSON-Objekts an Ausgabe

Das Objekt würde in etwa so aussehen:

{ 
    htmlFile1: '<p>some html one!</p>', 
    htmlFile2: '<span>some html two!</span> 
} 

Dann würde Ich mag es meine Ausgabe wie angebracht werden:

App.templates = { .... } 

Die Erstellung des Objekts erfolgt. Ich kämpfe gerade mit Webpack und finde heraus, wie man es an das Hauptobjekt anbringt. Sollte ich es einfach auf die Festplatte schreiben und es benötigen? Oder gibt es eine Möglichkeit, es über das Plugin zum Bundle hinzuzufügen?

Ich benutze Rivets.js als Vorlage-Engine und ich konnte nichts finden, das so etwas schon tut.

Auch erwähnenswert, alles was ich benutze ist Webpack und Npm. Nein Grunt/Gulp/etc

Vielen Dank! Mike

Antwort

0

Sie webpack die verwenden könnte require.context alle HTML-Dateien in einem Verzeichnis als Text zu importieren, verarbeiten Sie den Text, und exportieren Sie die Ergebnisse als ein einzelnes Objekt:

const requireTemplate = require.context('./templates', false, /\.html$/); 

module.exports = requireTemplate.keys().reduce((templateMap, templatePath) => { 
    const templateName = templatePath.match(/\/(\w*?)\.html/)[1]; // get filename without path and extention 
    templateMap[templateName] = require(templatePath); 
    return templateMap; 
}, {}); 
+0

Sorry, aber ich bin nicht bewusst, wenn es darum geht, zu Webpack. Würde das aber etwas in einem Plugin oder in meiner Codebase sein? Und wie würde ich das resultierende Objekt an den globalen Namespace anhängen? – mike

+0

Dies wäre ein Modul in Ihrer Codebase, kein Plugin. Sie könnten es "templateMap.js" nennen und es neben Ihrem Einstiegspunkt platzieren. Dann könntest du es entweder mit 'require ('./ templateMap')' verwenden oder wenn du es als global hinzufügen möchtest, kannst du das [ProvidePlugin] (https://webpack.github.io/docs/list-of) verwenden -plugins.html # provideplugin) wie folgt: 'new webpack.ProvidePlugin ({TEMPLATES:" ./templateMap "})' und greife darauf als 'TEMPLATES' in deiner App zu. – SimpleJ

Verwandte Themen