2017-03-09 4 views
1

Ich schreibe einen benutzerdefinierten Webpack-Loader.webpack loader module.exports seltsames Verhalten

Es wandelt Lenker in Lenkervorlagen um, aber ich bekomme ein seltsames Problem beim Exportieren eines Objekts statt einer Funktion.

im Wesentlichen das funktioniert gut:

'module.exports = (Handlebars).template(' + source + ');' 

dies nicht gelingt: mit Fehlern (The partial foo could not be compiled when running in runtime-only mode):

'module.exports.compile = (Handlebars).template(' + source + ');' 

Wie ist es anders?

Antwort

0
module.exports =() => { 
    compile: handlebars.template(templateSpec), 
    attributes: myFrontMatterData 
} 

Dies kann nicht funktionieren, weil es nicht gültig JavaScript ist und Sie sollten eine SyntaxError: Unexpected token : bekommen. Wenn Sie geschweifte Klammern verwenden, hat die Pfeilfunktion einen regulären Block Function body, der nicht implizit ein Objekt zurückgibt, sondern genau wie eine reguläre Funktion. Mit einem Blockkörper wäre die richtige Funktion sein:

module.exports =() => { 
    return { 
    compile: handlebars.template(templateSpec), 
    attributes: myFrontMatterData 
    } 
} 

Sie können nach wie vor Objektliterale als implizite Rendite verwenden, sondern weil geschweiften Klammern Blöcke zu signalisieren sind reserviert, müssen Sie die Objektliteral in Klammern wickeln (siehe auch Returning object literals):

module.exports =() => ({ 
    compile: handlebars.template(templateSpec), 
    attributes: myFrontMatterData 
}) 
+0

Hey Michael danke für die Info, ich habe versucht, in Klammern zu wickeln, aber es gibt immer noch nicht das gleiche Verhalten wie beim Exportieren einer einzelnen Funktion. Im Grunde wird die Kompilation ausgeführt, wenn aus der Objektmethode 'ERROR in Fehler 'geworfen wird: Der partielle myPartial konnte nicht kompiliert werden, wenn er im Runtime-Only-Modus läuft, aber wenn er als Einzelfunktion ausgeführt wird, wird er gerendert. Es exportiert also gut, aber aus irgendeinem Grund ruft die Funktion ein anderes Ergebnis auf, wenn sie als Methode und Objekt exportiert wird. Du fragst dich, ob es sich um einen Edge-Fall mit dem Webpack-Modul api handelt oder ob es eine andere Möglichkeit gibt? – hobochildster