2014-02-09 2 views
0

Мне нужно прекомпилировать функцию для компиляции шаблона нефрита. После этого я могу использовать eval() для компиляции этой функции с указанными локальными опциями.* jade * precompile шаблоны для использования в следующий раз

Theorically, я нашел в исходном jade.compileClient (ранее называемый также options.client), но вызов этой функции вызывает непредвиденную ошибку, говоря «Джейд не определен»

пример кода:

precompiled = "[" + jade.compileClient(source, {filename: myFilenameExample}) + "]"; 
fn = eval(precompiled)[0]; //compilation 
html = fn(options); //execution 

Те же проблемы с рулями с помощью handlebars.precompile(): '(

нет проблем, вместо этого, с помощью EJS ejs.compile ({клиент: истинный})

+0

compileClient предполагается использовать на стороне клиента с [ jade runtime] (https://github.com/visionmedia/jade/blob/master/runtime.js) – alex

+0

ok :(но это невозможно, что не существует способа скомпилировать функцию в файл :( –

+0

Это действительно существует Но вам нужно добавить jade runtime поверх этого файла. – alex

ответ

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 
    } 
}); 
+0

Таким образом, вы не можете сохранить скомпилированную функцию, мне нужно сохранить как строку в точности функцию для создания скомпилированной функции –

1

Итак, вот как вы можете связать нефрит с шаблоном:

$ 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 
Смежные вопросы