Um gerador de arquivo plano super simples para uso com gole. Ele compila uma série de páginas HTML usando um layout comum. Essas páginas também podem incluir parciais HTML, ajudantes de guidão externos ou dados externos como JSON ou YAML.
A Panini não é um gerador de sites estáticos de pleno direito-em relação, resolve o problema muito específico de montar arquivos planos a partir de elementos comuns, usando uma linguagem de modelagem.
npm install panini --save-dev
Alimente a Panini um fluxo de arquivos HTML e obtenha um delicioso site achatado na outra extremidade.
var gulp = require ( 'gulp' ) ;
var panini = require ( 'panini' ) ;
gulp . task ( 'default' , function ( ) {
gulp . src ( 'pages/**/*.html' )
. pipe ( panini ( {
root : 'pages/' ,
layouts : 'layouts/' ,
partials : 'partials/' ,
helpers : 'helpers/' ,
data : 'data/'
} ) )
. pipe ( gulp . dest ( 'build' ) ) ;
} ) ;
Observe que a Panini carrega layouts, parciais, ajudantes e arquivos de dados uma vez na primeira execução. Sempre que esses arquivos mudarem, ligue para panini.refresh()
para atualizar. Você pode fazer isso facilmente dentro de uma chamada para gulp.watch()
:
gulp . watch ( [ './src/{layouts,partials,helpers,data}/**/*' ] , [ panini . refresh ] ) ;
root
Tipo: String
Caminho para a pasta raiz Todas as páginas vivem. Esta opção não puxa os próprios arquivos para o processamento - é para isso que serve gulp.src()
. Essa configuração diz a Panini qual é a raiz comum das páginas do seu site.
layouts
Tipo: String
Caminho para uma pasta contendo layouts. Os arquivos de layout podem ter a extensão .html
, .hbs
ou .handlebars
. Um layout deve ser nomeado default
. Para usar um layout diferente do padrão em uma página específica, substitua -o na questão da frente nessa página.
---
layout: post
---
<!-- Uses layouts/post.html as the template -->
Todos os layouts têm um guidão especial parcial chamado body
, que contém o conteúdo da página.
<!-- Header up here -->
{{ > body}}
<!-- Footer down here -->
pageLayouts
Tipo: Object
Uma lista de predefinições para layouts de página, agrupada por pasta. Isso permite que você defina automaticamente todas as páginas em uma determinada pasta para ter o mesmo layout.
panini ( {
root : 'src/pages/' ,
layouts : 'src/layouts/' ,
pageLayouts : {
// All pages inside src/pages/blog will use the blog.html layout
'blog' : 'blog'
}
} )
partials
Tipo: String
Caminho para uma pasta contendo parciais HTML. Os arquivos parciais podem ter a extensão .html
, .hbs
ou .handlebars
. Cada um será registrado como um guidão parcial que pode ser acessado usando o nome do arquivo. (O caminho para o arquivo não importa - apenas o nome do próprio arquivo é usado.)
<!-- Renders partials/header.html -->
{{ > header}}
helpers
Tipo: String
Caminho para uma pasta contendo ajudantes do guidão. Os ajudantes de manuseio são arquivos .js
que exportam uma função via module.exports
. O nome usado para registrar o ajudante é o mesmo que o nome do arquivo.
Por exemplo, um arquivo chamado markdown.js
que exporta essa função adicionaria um ajudante de guidão chamado {{markdown}}
.
var marked = require ( 'marked' ) ;
module . exports = function ( text ) {
return marked ( text ) ;
}
data
Tipo: String
Caminho para uma pasta contendo dados externos, que serão passados para todas as páginas. Os dados podem ser formatados como json ( .json
) ou yaml ( .yml
). Dentro de um modelo, os dados são armazenados dentro de uma variável com o mesmo nome do arquivo de onde veio.
Por exemplo, um arquivo chamado contact.json
com pares de chave/valor, como o seguinte:
{
"name" : "John Doe" ,
"email" : "[email protected]" ,
"phone" : "555-1212"
}
Pode ser usado para produzir o valor de John Doe dentro de um modelo usando a sintaxe do guidão de {{contact.name}}
.
Os dados também podem ser um arquivo .js
com um module.exports
. Os dados retornados pela função de exportação serão usados.
Os dados também podem ser inseridos na própria página com um modelo de matéria frontal na parte superior do arquivo.
Por fim, a variável page
reservada é adicionada a cada modelo de página à medida que renderiza. Ele contém o nome da página que está sendo renderizada, sem a extensão.
Você também pode usar Panini via CLI.
Usage: panini --layouts=[layoutdir] --root=[rootdir] --output=[destdir] [other options] 'pagesglob'
Options:
--layouts (required) path to a folder containing layouts
--root (required) path to the root folder all pages live in
--output (required) path to the folder compiled pages should get sent to
--partials path to root folder for partials
--helpers path to folder for additional helpers
--data path to folder for additional data
the argument pagesglob should be a glob describing what pages you want to apply panini to.
Example: panini --root=src/pages --layouts=src/layouts --partials=src/partials --data=src/data --output=dist 'src/pages/**/*.html'
git clone https://github.com/foundation/panini
cd panini
npm install
Use npm test
para executar testes.