你如何预编译ejs模板到文件

时间:2012-07-21 02:52:53

标签: ejs

所以我想将ejs模板预编译成.js文件

var compiled = ejs.compile(source);
fs.writeFileSync(target, 'myTemplateFunction = ' + compiled);

但是这可以成为

function (locals){
   return fn.call(this, locals, filters, utils.escape);
}

预编译和将ejs模板编写到.js文件中的最佳方法是什么

2 个答案:

答案 0 :(得分:0)

您可以创建templates.js文件(手动或在代码中)作为空模块。然后在编译模板后,将编译好的函数附加到空模块上。

var ejs = require('ejs');
var fs = require('fs');

fs.writeFileSync('./template.js', 'module.exports = { }', 'utf8');

var compiled = ejs.compile(fs.readFileSync('./example.ejs', 'utf8'));

// Add an example function to the template file that uses the compiled function
require('./template').example = compiled;

// Get the example template again (this could be in another file for example)
var output = require('./template').example;
var html = output({ id: 10, title: 'Output' });

默认情况下,由于modules are cached,您应该能够require('./template.js')在任何需要的位置,并且会附加所有预编译模板。

答案 1 :(得分:0)

Lodash _.template()方法在编译期间创建EJS模板函数的字符串表示,并将其作为 source 属性附加到已编译的函数。您可以将该字符串存储到JS文件中,将其嵌入到HTML中,或者在睡觉前将其读取给您的孙子。

例如:

orderBy

Webpack的ejs-loader模块使用此方法。另请注意,npm包ejs不提供此类属性。