产生输出

假设我们有下面的Jade源码:

  1. - var title = 'yay'
  2. h1.title #{title}
  3. p Just an example

compileDebug 选项不是false, Jade 会编译时会把函数里加上 __.lineno = n;, 这个参数会在编译出错时传递给rethrow(), 而这个函数会在Jade初始输出时给出一个有用的错误信息。

  1. function anonymous(locals) {
  2. var __ = { lineno: 1, input: "- var title = 'yay'\nh1.title #{title}\np Just an example", filename: "testing/test.js" };
  3. var rethrow = jade.rethrow;
  4. try {
  5. var attrs = jade.attrs, escape = jade.escape;
  6. var buf = [];
  7. with (locals || {}) {
  8. var interp;
  9. __.lineno = 1;
  10. var title = 'yay'
  11. __.lineno = 2;
  12. buf.push('<h1');
  13. buf.push(attrs({ "class": ('title') }));
  14. buf.push('>');
  15. buf.push('' + escape((interp = title) == null ? '' : interp) + '');
  16. buf.push('</h1>');
  17. __.lineno = 3;
  18. buf.push('<p>');
  19. buf.push('Just an example');
  20. buf.push('</p>');
  21. }
  22. return buf.join("");
  23. } catch (err) {
  24. rethrow(err, __.input, __.filename, __.lineno);
  25. }
  26. }

compileDebug 参数是false, 这个参数会被去掉,这样对于轻量级的浏览器端模板是非常有用的。结合Jade的参数和当前源码库里的 ./runtime.js 文件,你可以通过toString()来编译模板而不需要在浏览器端运行整个Jade库,这样可以提高性能,也可以减少载入的JavaScript数量。

  1. function anonymous(locals) {
  2. var attrs = jade.attrs, escape = jade.escape;
  3. var buf = [];
  4. with (locals || {}) {
  5. var interp;
  6. var title = 'yay'
  7. buf.push('<h1');
  8. buf.push(attrs({ "class": ('title') }));
  9. buf.push('>');
  10. buf.push('' + escape((interp = title) == null ? '' : interp) + '');
  11. buf.push('</h1>');
  12. buf.push('<p>');
  13. buf.push('Just an example');
  14. buf.push('</p>');
  15. }
  16. return buf.join("");
  17. }