Модульный набор инструментов для создания статических веб-сайтов.
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 — молниеносно быстрый веб-компилятор и сервер в одном (также спасибо за множество фрагментов кода!)