Front End

21 dez, 2017

Nunjucks: Template engine para JS

Publicidade

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!