2016-09-20 4 views
1

Ich stieß auf die String interpolation-Funktion in ES6. Es funktioniert, wenn ich die rohe Zeichenkette im Code definiere. Aber ich möchte die rohe Zeichenfolge aus einer Datei lesen und dann die Platzhalter ersetzen. Wie es geht?ES6 String-Interpolation von Datei Inhalt

datei.txt

hello ${customer.name} 

Knoten JS

var customer = {name: 'sid'}; 
    var data = fs.readFileSync("file.txt","utf8"); 
    // what should go here so that data is 'Hello sid'? 
+4

Nein, Sie brauchen eine geeignete Vorlagen-Engine dafür. – zerkms

Antwort

1

Ich entschied mich, mit es6-template-strings zu gehen, wie es gerade scheint. Petr Vorschlag eval auch verwenden funktioniert, aber ich habe einige Einschränkungen mit eval für mein Projekt

var data = fs.readFileSync("file.txt","utf8"); 
var compiled = compile(data); 
var content = resolveToString(compiled, customer); 
+0

Ja, es6-Template-Strings ist der Weg zu gehen. An dieser Stelle hat die ES6-Vorlagensyntax keine "nativen" Vorteile, es ist nur eine weitere Vorlagen-Engine ohne zusätzliche Funktionen, wenn eine andere Vorlagen-Engine in der App verwendet wird (Lenker, Nunjucks, EJS usw.), kann sie hier verwendet werden für Konsistenz mit dem gleichen Grad an Erfolg. – estus

3

Der einzige Weg ist, um escape die Vorlage Zeichenfolge in der Datei und ein eval später machen, sehen this question für weitere Details .

2

Sie können bauen einen Einzeiler anstelle eine Template-Engine geladen. Dies wird $ {field} durch Werte von einem Objekt ersetzen.

var obj = {a: 'one', b: 'two'}; 
var templ = '${a}, ${b}'; 

templ.replace(/\${([^}]*)}/g, (r,k)=>obj[k]); 

// 'one, two'