首页 » 前端 » 正文

JavaScript模板引擎Nunjucks

接触低代码后才认识了这个家伙:

  • 提供丰富的语言特性和块继承、自动转移、宏和异步控制等等。
  • 模板引擎就是基于模板配合数据构造出链输出的一个组件。
  • 尽可能情况下,我们都需要读取数据后渲染模板,然后呈现给用户。故我们需要约会对应的模板引擎。
  • 简单来说,Nunjucks就实现了在后台服务器显示内容的模板。

下面来看看一些使用方法

一、node上的基本使用

nunjucks.render(name, [context], [callback])

然后在模板foo.html中就可以使用username字段了

二、多模板管理

在 node 端使用 FileSystemLoader 加载模板,浏览器端则使用 WebLoader 通过 http 加载(或使用编译后的模板)。

很显然,上面单独一个模板应用并不能满足日常需求,而对于低代码平台来说,模板的作用在于通过node生成对应的js文件,比如,我们要通过一个json来生成目标文件中的js方法等。

1、有几点需要注意的是,FileSystemLoader里的第二个参数可以为空,一般不常用,不过可以添加autoescape: true,nunjuck 会转义所有的输出,为了安全建议一直开启。

2、我们前面说了这是node生成代码,所以第3步中获取数据流context,在第4步中写入,path是目标文件路径。 3、在第2步后面,还可以添加一个addFilter,可以理解你给模板引擎定义了一个内置方法,在模板中使用数据变量的时候可以调用{{shorten|shorten}}

还有更多定义和参数方法,这里不再一一赘述,可以看官网,就目前这些方法应该可以满足一个复杂应用的使用。

三、模板使用

前面说了很多关于引用库文件的方法,下面就是重头戏了,也是大家最关心的模板问题,毕竟要通过模板生产目标文件的。

1、基本变量使用,前面我们是这么执行的env.render('模板.js', {key: value}),那么js里就可以直接使用

2、除了基本数据类型就是array、object了

3、条件判断,就像写js一样,有着各种语法

4、再看一个复杂一点的。这里通过macro定义了一个方法traverseArry,这样你在模板中就可以使用这个方法了。

综上来看,Nunjucks在逻辑上跟我们常见的js没有太大区别,主要的还是语法问题,是不是挺简单的。

四、注意事项

1、模块加载

我们在模板中可以加载另一个模板js,这样才有了上面macro定义方法达到共用的目的,除了这种定向的,我们在实际应用中也会遇到动态加载的问题,你可能想到用条件判断进行import,比如:

但是你这样会发现,它加载失败了,因为import外不可条件判断,正确的做法是定义一个路径变量

2、多模板载入

上面我们进行了路径条件判断实现不同模板加载的方式,但是有个容易忽略的问题,就是新路径新路径/模板2.js也要在node中添加到,否则识别不到。前面我们说Environment来实例化模板路径,它第一个参数可以传一个路径,也可以是路径数组,可以支持多个路径的情况。

3、js语法和模板语法混用

很明显两者语法思路一样,写法不同,在写js模板的时候要特别注意,到底是要做逻辑还是要输出,否则很容易出现错误的结果。

好了,以上就是js模板引擎Nunjucks的一些常见使用方法了,有兴趣的同学可以试试。

发表评论