Супер простой плоский генератор файлов для использования с Gulp. Он компилирует ряд HTML -страниц с использованием общего макета . Эти страницы также могут включать HTML -частичные , помощники внешних рулей или внешние данные в качестве JSON или YAML.
Panini не является полноценным генератором статического сайта, который решает очень специфическую проблему сборки плоских файлов из общих элементов с использованием языка шаблона.
npm install panini --save-devПоправьте Panini потоком HTML -файлов и получите восхитительный сплющенный сайт на другой конец.
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' ) ) ;
} ) ; Обратите внимание, что Panini загружает макеты, частичные, помощники и файлы данных, один раз при первом запуске. Всякий раз, когда эти файлы меняются, вызовите panini.refresh() , чтобы встать на это. Вы можете легко сделать это в вызове gulp.watch() :
gulp . watch ( [ './src/{layouts,partials,helpers,data}/**/*' ] , [ panini . refresh ] ) ; root Тип: String
Путь к корневой папке. Все страницы живут. Этот вариант не втягивает сами файлы для обработки - вот для чего нужен gulp.src() . Эта настройка рассказывает Панини, какова обычный корень страниц вашего сайта.
layouts Тип: String
Путь к папке, содержащей макеты. Файлы макета могут иметь расширение .html , .hbs или .handlebars . Один макет должен быть назван default . Чтобы использовать макет, отличный от по умолчанию на определенной странице, переопределите его на передней части на этой странице.
---
layout: post
---
<!-- Uses layouts/post.html as the template --> Все макеты имеют специальную рулю частично, называемое body , которое содержит содержимое страницы.
<!-- Header up here -->
{{ > body}}
<!-- Footer down here -->pageLayouts Тип: Object
Список предустановки для макетов страниц, сгруппированный по папке. Это позволяет автоматически устанавливать все страницы в определенной папке, чтобы иметь одинаковую макет.
panini ( {
root : 'src/pages/' ,
layouts : 'src/layouts/' ,
pageLayouts : {
// All pages inside src/pages/blog will use the blog.html layout
'blog' : 'blog'
}
} )partials Тип: String
Путь к папке, содержащей HTML -частичные. Частичные файлы могут иметь расширение .html , .hbs или .handlebars . Каждый будет зарегистрирован как частичный руль, к которым можно получить доступ, используя имя файла. (Путь к файлу не имеет значения - используется только имя самого файла.)
<!-- Renders partials/header.html -->
{{ > header}}helpers Тип: String
Путь к папке, содержащей помощников руля. Способерки Handlebars - это файлы .js , которые экспортируют функцию через module.exports . Имя, используемое для регистрации помощника, совпадает с именем файла.
Например, файл с именем markdown.js , который экспортирует эту функцию, добавит помощника руля под названием {{markdown}} .
var marked = require ( 'marked' ) ;
module . exports = function ( text ) {
return marked ( text ) ;
}data Тип: String
Путь к папке, содержащей внешние данные, которые будут переданы на каждую страницу. Данные могут быть отформатированы как json ( .json ) или yaml ( .yml ). В шаблоне данные хранятся в переменной с тем же именем, что и файл, из которого он был.
Например, файл с именем contact.json с парами клавиш/значения, например, следующее:
{
"name" : "John Doe" ,
"email" : "[email protected]" ,
"phone" : "555-1212"
} Можно использовать для вывода значения Джона Доу в шаблоне, используя синтаксис руля {{contact.name}} .
Данные также могут быть файлом .js с module.exports . Будут использоваться данные, возвращаемые функцией экспорта.
Данные также могут быть вставлены в саму страницу с шаблоном переднего вещества в верхней части файла.
Наконец, зарезервированная переменная page добавляется в каждый шаблон страницы, когда она рендера. Он содержит название визуализируемой страницы, без расширения.
Вы также можете использовать Panini через 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 Используйте npm test для запуска тестов.