Underscore.jsのtemplate methodはERBライクな記法の極めてシンプルなテンプレートエンジンですが、正規表現を指定することで記法をカスタマイズすることが出来ます。
今回はJSのソースを生成するために使うので、以下のようにしてみました。
templateSettings.js
_.templateSettings.interpolate=/0?\/\*\s*%=([\s\S]+?)%\s*\*\//g;
_.templateSettings.evaluate=/0?\/\*\s*%([\s\S]+?)%\s*\*\//g;
どういう記法なのかというと、JSのブロックコメントorJSのブロックコメントの手前に0が付いている物の中に、
%=と%でくくられた範囲があればcontextの変数を展開し、%と%ででくくられた範囲があれば範囲内のJSをテンプレート処理時に実行するというものです。
使用例はこちら
template.js
var configs = [
/*%
configs.forEach(function(config){
var isNotLast = configs.indexOf(config) !== (configs.length - 1)
%*/
/* %=config% */
0/*% if(isNotLast){ %*/,0/*% }
}) %*/
];
テンプレート記法がブロックコメントなのでJSのソースが壊れませんし、コメント以外に0も入れられるのでテンプレート外にカンマを入れていても[,]のようになるのも防げます。