最近换了工作,在新的工作中,需要实现后端渲染,故而一改最初的纯html+js形式,选择页面框架、TDK及部分页面后端渲染,由于后台采用java开发,一开始曾考虑另起一个tomcat服务,用于渲染前端页面,而实际搭建完框架后发现,一年多不碰java(期间虽然用过Groovy、kotlin,但实际开发起来还是不如js来得畅快),已经对java的繁琐有些不耐烦,最后转而选择采用NodeJS做后端渲染,一来部分前端模板可以复用(后面发现复用其实是个很纠结的想法),二来做前端开发的兄弟也可以快速上手,相比他们并不懂的java来说,毕竟NodeJS更容易学习接受。
确定了适用NodeJS,下面就确定一下大概框架,采用了目前常见的组合——express+template,因为最初前端使用了所谓最快的模板引擎artTemplate,这里tempate想进行复用,就采用了服务器版artTemplate,实际测试发现并不符合我的需求,由于最近一年使用PHP的YII框架,其中模板layout可以使用block,很方便重写样式、脚本等部分,这里实测后发现,后端模板如果没有layout,基本和写纯静态无异了。既然要layout,当然还想有类似继承等能力,ejs、handlebars这些虽然强大,但是功能不够齐全,这时候想到了备受推崇的express4默认模板引擎——jade,使用jade写几个模板后发现,jade这样的东西对于没有学过的前端兄弟还是一门头疼的事,甚至比写jsp还头疼,于是放弃jade另寻他路,doT、dustjs都有尝试,但都略有不足,最后无意间发现Nunjucks完全符合我的需求,而且是mozilla在维护的一套模板引擎,类似dustjs,都提供异步api,语法几乎是完全移植自python重的模板引擎——jinja2,最主要的,这货还提供了中文api,这下感觉已经为公司做前端的兄弟考虑得够周全了,最终确定下来采用Nunjucks移植页面框架以及部分需要做seo的页面,至于artTemplate部分,由于语法不同,可以完全作为文本输出,保留前端异步渲染,这样可以一步步平滑移植,降低工作量。
啰嗦这么多,想必已经表达清楚我的意思,没错,就是富功能模板引擎,可以定义全局函数、变量,可以定义过滤器,可以定义宏,可以模板继承,可以……。不过套用网上那句话,合适的就是最好的,大家可以理性选择自己需要的模板引擎。下面介绍下主角Nunjucks,名字有点怪,功能前面差不多都提及了,试用后发现确实挺实用,而且自带watch,可以热加载模板(虽然部署后配合pm2完全用不上热加载,但还是值得一提的),定界符默认使用{{}}输出数据,使用{%%}插入指令,不像dustjs,放眼望去虽然简洁实际上很多种定界符(个人见解)。
Nunjucks地址:
感兴趣的同学可以直接去官网学习一下,当然,如果你不是像我一样需要一个富功能的模板引擎,大可以选择ejs,如果你正在使用jade,但又不爽jade那种把html写得不伦不类的模板语言,推荐你试试Nunjucks。
补充一点,由于是jinja的语法,这里面if内的逻辑判断有些啰嗦,不能使用js原生的||、&&、!等用于判断,取而代之的是or、and、not等。不过稍稍习惯后使用起来还是挺顺利的。
上一篇: 非深户出入境随笔 下一篇: Node应用的进程管理器之PM2