* jade *预编译模板,以便下次使用

时间:2014-02-09 02:28:24

标签: javascript node.js templates compilation pug

我需要预编译函数来编译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})

2 个答案:

答案 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
  }
});