2016-09-20 21 views
1

我遇到了ES6中的String interpolation功能。如果我在代碼中定義原始字符串,它將起作用。但我想從文件中讀取原始字符串,然後替換佔位符。怎麼做?ES6從文件內容中進行字符串插值

file.txt的

hello ${customer.name} 

節點JS

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

不,你需要一個適當的模板引擎。 – zerkms

回答

1

我決定去es6-template-strings,因爲它看起來很直接。切赫的使用eval建議也工作,但我一直在使用eval一些限制爲我的項目

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

是的,es6模板字符串是要走的路。此時,ES6模板語法沒有「原生」優點,它只是另一個具有零附加功能的模板引擎,如果在應用程序中使用其他模板引擎(Handlebars,Nunjucks,EJS等),則可以在此處使用與同等程度的成功保持一致。 – estus

3

的唯一方法是escape文件中的模板字符串並作出eval後,看到this question更多細節。

2

您可以構建而不是加載一個模板引擎一個班輪。這將用來自對象的值替換$ {field}。

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

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

// 'one, two'