Супер простой плоский генератор файлов для использования с 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
для запуска тестов.