介绍

art-template 是一个简约、超快的模板引擎。
它采用作用域预声明的技术来优化模板渲染速度,从而获得接近 JavaScript 极限的运行性能,并且同时支持 NodeJS 和浏览器。

特性

  1. 拥有接近 JavaScript 渲染极限的的性能
  2. 调试友好:语法、运行时错误日志精确到模板所在行;支持在模板文件上打断点(Webpack Loader)
  3. 支持 Express、Koa、Webpack
  4. 支持模板继承与子模板
  5. 浏览器版本仅 6KB 大小

安装

服务端安装

  1. npm install art-template --save

客户端安装
下载工具包引用(6KB)

配置

  1. // 模板名
  2. filename: null,
  3. // 模板语法规则列表
  4. rules: [nativeRule, artRule],
  5. // 是否开启对模板输出语句自动编码功能。为 false 则关闭编码输出功能
  6. // escape 可以防范 XSS 攻击
  7. escape: true,
  8. // 启动模板引擎调试模式。如果为 true: {cache:false, minimize:false, compileDebug:true}
  9. debug: detectNode ? process.env.NODE_ENV !== 'production' : false,
  10. // bail 如果为 true,编译错误与运行时错误都会抛出异常
  11. bail: true,
  12. // 是否开启缓存
  13. cache: true,
  14. // 是否开启压缩。它会运行 htmlMinifier,将页面 HTML、CSS、CSS 进行压缩输出
  15. // 如果模板包含没有闭合的 HTML 标签,请不要打开 minimize,否则可能被 htmlMinifier 修复或过滤
  16. minimize: true,
  17. // 是否编译调试版
  18. compileDebug: false,
  19. // 模板路径转换器
  20. resolveFilename: resolveFilename,
  21. // 子模板编译适配器
  22. include: include,
  23. // HTML 压缩器。仅在 NodeJS 环境下有效
  24. htmlMinifier: htmlMinifier,
  25. // HTML 压缩器配置。参见 https://github.com/kangax/html-minifier
  26. htmlMinifierOptions: {
  27. collapseWhitespace: true,
  28. minifyCSS: true,
  29. minifyJS: true,
  30. // 运行时自动合并:rules.map(rule => rule.test)
  31. ignoreCustomFragments: []
  32. },
  33. // 错误事件。仅在 bail 为 false 时生效
  34. onerror: onerror,
  35. // 模板文件加载器
  36. loader: loader,
  37. // 缓存中心适配器(依赖 filename 字段)
  38. caches: caches,
  39. // 模板根目录。如果 filename 字段不是本地路径,则在 root 查找模板
  40. root: '/',
  41. // 默认后缀名。如果没有后缀名,则会自动添加 extname
  42. extname: '.art',
  43. // 忽略的变量。被模板编译器忽略的模板变量列表
  44. ignore: [],
  45. // 导入的模板变量
  46. imports: runtime

使用

目录结构
image.png
具体配置

  1. // view engine setup
  2. app.engine('art', require('express-art-template'));
  3. app.set('view options', {
  4. debug: process.env.NODE_ENV !== 'production',
  5. escape: false // 转化HTML5代码
  6. });
  7. app.set('views', path.join(__dirname, './view'));
  8. app.set('view engine', 'art')

渲染方式

  1. import template from "art-template/lib/template-web.js"
  2. let templateForIndex = "<h1>{{ content }}</h1>"
  3. // 以下两种方式,二选一即可。
  4. // 使用 render
  5. document.getElementById("container").innerHTML = template.render(templateForIndex, {
  6. content: "哈哈哈"
  7. });
  8. // 使用 compile
  9. let renderFunction = template.compile(templateForIndex);
  10. document.getElementById("container").innerHTML = renderFunction({
  11. content: "哈哈哈"
  12. })