Модульный набор инструментов для создания статических веб-сайтов.
Sakit — это фреймворк, который помогает вам без особых усилий создавать мощные конвейеры сборки для статических веб-сайтов. Он минимален и модульен, использует потоки, а в наборе инструментов Sakit есть множество плагинов и преобразований, которые вы можете использовать.
Sakit все еще находится на ранней стадии разработки, но вы можете взять его и использовать, чтобы понять, стоит ли вам беспокоиться об этом или нет.
агностик фреймворка : работает с любой фреймворком, который может выводить строку
модульный : у вас никогда не будет того, что вам не нужно, но вы можете npm install
small api : у него всего 7 основных методов, только 3 из них вы должны использовать.
никаких ограничений : вы никогда не ограничены возможностями и шаблонами генератора статических сайтов.
быстрый, эффективный с точки зрения памяти : интенсивное использование потоков
npm i stakit
var stakit = require('stakit')var { рендеринг, гидрат } = require('stakit-choo')var app = require('.')var kit = stakit()
.routes(функция (состояние) {return ['/']
})
.render(рендер(приложение))
.transform(гидрат)kit.output(stakit.writeFiles('./public'))Обычно при создании статического сайта вы делаете две вещи:
наполните свое приложение некоторым контентом
копировать статические файлы
Существует множество модульных (и прекрасных) инструментов для объединения Javascript или преобразования CSS. Sakit — нечто похожее, но для всего сайта и особенно ориентировано на HTML-файлы.
Вам придется заняться объединением вашего приложения и включением пакета, если это то, что вам нужно. Следуя философии Choo, он небольшой, понятный и простой в использовании. Он был разработан для работы в основном с Choo, но должен работать и с другими изоморфными фреймворками.
Sakit вызывается программно, а не из командной строки, поэтому вам понадобится файл Javascript (например, build.js ), где он вам понадобится. После этого вы можете инициализировать комплект с помощью stakit() , а затем связать несколько методов.
В конвейере должны появиться два метода:
routes(fn)
render(fn)
Все остальные методы являются необязательными и вызываются в следующем порядке:
все промежуточное программное обеспечение, применяемое с помощью kit.use()
примененная функция routesReducer
для каждого маршрута:
одиночный вызов примененного renderer
все вызовы transform
Завершите конвейер с помощью kit.output() .
В этом разделе представлена документация о том, как работает каждая функция в Sakit. Это задумано как технический справочник.
kit = stakit() Инициализируйте новый экземпляр kit .
kit.html(template, selector)Устанавливает начальный шаблон HTML и селектор.
kit.use(fn(context)) Добавляет промежуточное программное обеспечение/плагин в список промежуточного программного обеспечения, функции общего назначения выполнялись до генерации маршрута. Вы можете изменить контекст любым удобным для вас способом: от изменения state до установки transform s.
kit.use(функция (ctx) {
ctx._transforms.push(преобразование)})Дополнительную информацию см. в разделе Промежуточное ПО.
kit.routes(routeReducer(state)) routeReducer — это функция, которая получает context.state в качестве параметра и возвращает Array строк/маршрутов. Это маршруты, по которым Sakit будет вызывать render .
kit.routes(функция (состояние) {
вернуть Object.keys(state.content)
// или статически
return [ '/', '/about', '/blog' ]})kit.render(renderer(route, state)) Устанавливает средство визуализации сборки. Вот где происходит волшебство. renderer будет вызываться для каждого маршрута, возвращаемого routes .
Он должен вернуть объект со следующими значениями:
{
html: строка, // результат рендеринга
state: object // состояние после рендеринга (необязательно)}Преобразования получат обновленное состояние, возвращенное здесь.
kit.transform(transformFn, opts) Помещает преобразование в список преобразований. Sakit использует documentify и потоки для создания HTML.
Они вызываются после замены отображаемого содержимого в HTML.
См. «Преобразования» для получения дополнительной информации.
kit.output(writerObject) Запускает конвейер сборки и завершает его передачей всех маршрутов в writerObject.write({ destination, stream }) . Возвращает Promise , которое ждет, пока все файлы (маршруты и статические) не будут полностью записаны.
По умолчанию он использует Writer, который выводит сайт в каталог ./public .
См. «Писатели» для получения дополнительной информации.
Встроенное промежуточное программное обеспечение:
stakit.state(extendState) Утилита, которая поможет вам добавить значения в context.state
kit.use(stakit.state({ message: 'доброе утро!' }))stakit.copy(files)Промежуточное программное обеспечение для копирования файлов в выходной каталог.
// Копируем файлы в одно и то же место. «robots.txt»: «robots.txt», 'sitemap.xml': 'sitemaps/sitemap.xml'}))
Documentify очень мощный и легко модифицируется. Общий формат преобразования Sakit:
// завернут в функциюfunction lang (context) {
// возвращаем преобразование documentify
return function (lang) {// вернуть поток преобразованияreturn hstream({ html: { lang: lang } })
}} Примечание: hstream — очень хороший друг!
Преобразование documentify заключено в функцию, поэтому мы можем получить context , когда он нам нужен, не связываясь с API documentify . Если вы хотите обойти это, вы можете просто вернуть преобразование documentify из функции.
Посмотрите, какие преобразования входят в состав Sakit, в transforms/readme.md .
Средства записи выводят сгенерированные преобразованные статические файлы. Это может варьироваться от вывода в файловую систему до помещения их в архив Dat.
Писатель должен реализовать метод: write . Для каждого файла, включая сгенерированные страницы + файлы, добавленные в context._files , writer.write будет вызываться с файловым объектом. Он должен возвращать Promise , которое возвращается после очистки канала (файл был полностью записан).
Файловый объект выглядит следующим образом:
{
source: null | string,
destination: string,
stream: Stream
}Рекомендуется очищать выходной каталог перед каждой сборкой.
В качестве примера рассмотрим встроенный метод stakit.writeFiles .
Это все о писателях.
choo — прочный интерфейсный фреймворк размером 4 КБ
documentify — Модульный сборщик HTML
jalla — молниеносно быстрый веб-компилятор и сервер в одном (также спасибо за множество фрагментов кода!)