Com o intuito de permitir organizar e manipular os conteúdos HTML de uma mais fácil, intuitiva e dinâmica, costumamos usar os chamados templates engines (mecanismos de modelo) no desenvolvimento de nossas aplicações web.
O Nunjucks (extensão .njk), projeto de código aberto sob a licença BSD 2-clause “Simplified” License, é um mecanismo de modelo para JavaScript inspirado no jinja2 (Python). É muito familiar para quem já usa o Express (.ejs) e/ou o Jade (.pug), porém, é bem mais sofisticado e poderoso.
Além de possuir todo o controle de fluxo, loops e variáveis (que os outros templates engines possuem) ele também suporta alguns elementos de composição de página mais avançados, como:
- Herança em bloco
- Herança de layout
- Funções (macros)
- Tags personalizadas
- E muito mais!
Ele implementa um lexer completo e um analisador que gera um AST e um compilador que compila o JavaScript bruto, tornando os modelos muito mais rápidos, com tempo de renderização na faixa de milissegundos, e ainda permite que eles sejam pré-compilados.
A tecnologia também suporta a renderização do lado do cliente, permitindo preencher páginas complexas e usando os mesmos modelos para alterar a página quando o aplicativo recebe novos dados. Para isso, é necessário pré-compilar os modelos para produção e em seguida, precisa somente de um arquivo JavaScript 8k para executá-los. Fácil, não?
Vamos dar uma olhada em mais algumas das suas características.
Características principais
- Template inheritance (herança de modelo): Facilita a reutilização de modelos, ou seja, ao escrever um modelo é possível definir “blocos” que os modelos filhos podem substituir. Assim, o modelo filho pode herdar as características do modelo pai.
- Importação e macros: Permite carregar um modelo e acessar as variáveis e macros definidas nela.
- Includes: Serve para incluir um modelo dentro de outro modelo, é o oposto do extends.
- If/for/while: Lógica para testar condições.
Como começar a usar
A instalação é bem simples, podemos executá-la através do npm:
npm install nunjucks --save
Uma vez instalado, basta inseri-lo no projeto usando o require(‘nunjucks’) e configurá-lo. A configuração é feita através do método configure(), que recebe um objeto literal com as configurações desejadas e o caminho da pasta onde estão os arquivos .njk. Normalmente, só passamos o autoescape como true. A lista completa de configurações disponíveis pode ser encontrada neste link.
Em uma aplicação Node utilizando o Express, ficaria mais ou menos assim:
var app = express();
nunjucks.configure('views', {
autoescape: true,
express: app
});
app.get('/', function(req, res) {
res.render('index.html');
});
Então no nosso diretório views, poderíamos criar nossos arquivos njk:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{{ page_title }}</title>
</head>
<body>
{% for feature in features %}
<div class="module">
<h3>{{ feature.name }}</h3>
<p>{{ feature.description }}</p>
</div>
{% endfor %}
</body>
</html>
Os “features” do código acima são os dados que são passados pela função de renderização (render) para serem exibidos no HTML final, como mostra a seguir:
nunjucks.render(
'index.njk', {
page_title: "Templates engine characteristics",
features: [
{
name: "Express",
description: "fast"
},
{
name: "Gulp",
description: "clear"
},
{
name: "Nunjucks",
description: "better"
}
]
}
);
Ao ser interpretado, o seguinte código gera o seguinte HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Templates engine characteristics</title>
</head>
<body>
<div class="module">
<h3>Express</h3>
<p>fast</p>
</div>
<div class="module">
<h3>Gulp</h3>
<p>clear</p>
</div>
<div class="module">
<h3>Nunjucks</h3>
<p>better</p>
</div>
</body>
</html>
Com esse simples exemplo já dá para notar como o Nunjucks funciona e como poderá te ajudar na criação dos seus projetos. Confira o repositório do Nunjucks no GitHub e comece a usar esse poderoso template engine!




