2017-07-20 13 views
1

私の質問はhereと似ています。基本的に私はこのように見ている設定file.jsonを読みたい:coffeescriptの文字列補間

{ 
    "message": "Error in #{baseName} at #{directory}" 
} 

私はマップ/オブジェクトとして提供変数を使用してメッセージ文字列を補間したいと思います。上記の質問とは異なり、書式設定される文字列はコンパイル時には分かりません。

coffeescriptの組み込みメソッドを使用して文字列補間を実行することはできますか?または、くぼみまたは類似のテクニックを使用する必要がありますか?

+1

Coffeescriptは純粋にプリコンパイラであるため、「*」「bu」は提供されません「ilt-inの方法」である。 – deceze

答えて

-1

コメントは@deceze - no。 coffeescriptはコンパイルされ、この文字列補間構文を持たないJSとして実行されます。それでも、eval()を使用する必要がありますが、それは良い方法ではありません。

飛行文字列補間のためのJSライブラリspintfをお勧めします。

+0

テンプレートリテラルは、実行時にレンダリングされます。これは[有効なCoffeeScript](http://coffeescript.org/#try:x%20%3D%20%22%23%7BDate.now()%7D%22)です: 'x ="#{Date.now ()} "" CS文字列補間はJS文字列の連結に変換されるので、文字列を返す任意の有効なJSを使用できます。 また、ES6には[テンプレートリテラル](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals)があります。 –

+0

@EzraChu、trueですが、テンプレートリテラルを含む 'file.json'は、Coffeescriptでコンパイルされません。実行時にCoffeeScriptソースから翻訳されたJSによって評価されます。 ES6のテンプレートリテラルはオプションかもしれませんが、あなたが言及したように、CoffeescriptはES6補間ではなく、連結に移行します。たぶんあなたのためにこれを行うことができるCoffeescriptの風味があります。 –

0

CoffeeScriptテンプレートリテラルを使用して、非常に基本的なテンプレートエンジンを簡単に配線することができます。

module.exports = (context)-> 
    [ 
    some: "#{context.dynamic.content}" 
    , 
    some: 'other static content' 
    ] 

その後、あなたは単にあなたが望む値で関数を呼び出します:

render = require './data' 
myContext = 
    dynamic: content: 'some dynamic content' 

dynamicData = render(myContext) 

この時点dynamicDataで、あなたが輸出することをCSファイルとしてJSONを定義する必要があります

[ 
    some: 'some dynamic content' 
, 
    some: 'other static content' 
]