2016-09-20 9 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を使用するには、ペトルの提案も動作しますが、私はあなたが代わりにテンプレートエンジンをロードするワンライナーを構築することができます私のプロジェクト

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

はい、es6-template-stringsが使い方です。この時点で、ES6テンプレート構文には「ネイティブ」メリットはありません。アプリ内で他のテンプレートエンジン(ハンドルバー、Nunjucks、EJSなど)が使用されている場合は、余分な機能はゼロの別のテンプレートエンジンです。同じ程度の成功と一貫性を持たせるためです。 – estus

3

唯一の方法は、ファイル内のテンプレート文字列とは、eval後で作る詳細はthis questionを参照してくださいescapeにあります。

2

ためevalを使用して、いくつかの制約があります。これは$ {field}をオブジェクトの値に置き換えます。

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

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

// 'one, two'