我需要预编译函数来编译jade模板。 之后,我将使用eval()来编译此函数并使用指定的本地选项。
理论上,我在源代码jade.compileClient(以前称为options.client)中找到了,但调用此函数会引发意外错误,说“jade未定义”
代码示例:
precompiled = "[" + jade.compileClient(source, {filename: myFilenameExample}) + "]";
fn = eval(precompiled)[0]; //compilation
html = fn(options); //execution
使用handlebars.precompile()的Handlebars的相同问题:'(
没有问题,相反,EJS使用ejs.compile({client:true})
答案 0 :(得分:1)
好的,以下是将jade与模板捆绑在一起的方法:
$ echo 'var jade = (function() { var exports={};' > build.js
$ cat node_modules/jade/lib/runtime.js >> build.js
$ echo 'return exports;})();' >> build.js
$ jade -c -D < template.jade >> build.js
$ echo 'console.log(template({}))' >> build.js
$ node build.js
答案 1 :(得分:0)
我可能不完全理解你的问题。但似乎这会做你想要的:
var _jade = require('jade');
var template = process.cwd() + '/views/index.jade';
// get template from file system
fs.readFile(template, 'utf8', function(err, file){
if(err){
//handle errors
console.log('ERROR!');
return res.send('ERROR!');
}
else {
//compile jade template into function
var compiledTmpl = _jade.compile(file, {filename: template});
// set context to be used in template
var context = {title: 'Express'};
// get html back as a string with the context applied;
var html = compiledTmpl(context);
// do something with html
}
});