Keystone в наши дни выглядит устаревшим, я бы порекомендовал вам вместо этого взглянуть на Astro или Vite.
Keystone — генератор статических сайтов, идеально подходящий для быстрого создания небольших веб-сайтов. Никакой настройки не требуется, а набор удобных функций включен по умолчанию.
/public
и все готово.Создайте новый каталог и выполните следующую команду, чтобы настроить Keystone, package.json и git. Требуется узел 14.xx.
$ npm install keystone-ssg
Отлично, вы установлены!
Запустите сервер разработки Keystone, а затем перейдите по адресу http://localhost:8080, чтобы просмотреть пример веб-сайта.
$ npm run dev
После запуска команды проект создается в папке /public
и готов к загрузке.
$ npm run build
В проекте Keystone есть шесть важных каталогов, каждый из которых имеет свою цель:
Каждый файл HTML .html
и markdown .md
в папке страниц соответствует странице вашего веб-сайта. Здесь есть два файла в примере проекта, попробуйте открыть index.html
. Автоматическая маршрутизация будет связывать файлы в папку /public
при запуске npm run build
следующим образом:
/pages/index.html -> /public/index.html
/pages/example.md -> /public/example/index.html
Возможно, вы заметили, что index.html
имеет следующий тег: <_template basic.html />
. При этом содержимое index.html
помещается в файл шаблона с слотами по адресу /templates/basic.html
. Этот пользовательский формат тегов HTML работает и внутри файлов .md
.
Шаблоны можно использовать с /pages
, чтобы создать готовую основу для ваших страниц. Используйте тег <_slot />
в файле шаблона, чтобы предоставить точку входа для вашего контента. Откройте /templates/basic.html
и найдите:
< _var title default="Keystone default title" />
Это слот переменной с именем title
в файле шаблона с необязательным значением по умолчанию.
Использование следующего тега шаблона внутри /pages
позволит вам ввести в шаблон собственное значение со страницы контента:
< _template basic.html title="A custom title" />
Папка /components
просто используется для повторно используемых компонентов. Тег <_import>
используется для импорта компонентов в другие файлы HTML, пример которых находится внутри /templates/basic.html
.
< _import header.html />
Тег <_import>
также можно использовать для импорта содержимого любого другого типа файла (JS, SCSS и т. д.) после предварительного объединения источника.
Поместите файлы Javascript в папку /src
. Следующий тег будет преобразован в обычный тег импорта <script>
, ссылающийся на ваш файл /src/main.js
:
< _script main.js />
Импорт ES6 полностью поддерживается, и полученный файл будет транспилирован с помощью Babel, объединен с Rollup и минимизирован.
Папка /styles
используется для вашего CSS/SCSS. Следующий тег будет преобразован в обычный тег импорта CSS <link>
, ссылающийся на ваш скомпилированный файл /styles/main.scss
:
< _style main.scss />
Все функции node-sass
полностью поддерживаются, включая @import
.
Здесь размещаются статические ресурсы, то есть шрифты, изображения, значки. Здесь все будет перенесено в соответствующую папку в корневом каталоге, например:
/assets/favicon.ico -> /public/favicon.ico
/assets/fonts/fontname.ttf -> /public/fonts/fontname.ttf
<_template src='myfolder/myfile.html' />
.package.json
, не используйте начальную косую черту, если вы не хотите получить доступ к файлу за пределами проекта..keystone-page-loading
настроен на display: block
. Если в CSS для класса установлено значение display: none
, это можно использовать для создания индикатора загрузки.search.json
в корневом каталоге. Это массив JSON, содержащий объект для каждой страницы, в котором перечислено текстовое содержимое, заголовок и путь к странице.public
папка игнорируется Git, удалите public
строку из .gitignore
если вы хотите использовать ее для фиксации в Git. package.json
версией, до которой вы обновляетесь, и запустите npm install keystone-ssg
для быстрого обновления.Ярлык | Описание | Атрибуты |
---|---|---|
<_template> | Импортирует текущий файл в <_slot> в файле шаблона. | [имя файла], [имя переменной], источник |
<_slot> | Используется в файле шаблона в качестве точки входа для импортированного файла. | Никто |
<_var> | Используется в файле шаблона для замены переменной, взятой из <_template> | [имя переменной], по умолчанию |
<_import> | Импортирует компонент | [имя файла], источник |
<_script> | Создает тег <script> ссылающийся на встроенный скрипт. | [имя файла], источник |
<_style> | Создает тег <link> , ссылающийся на связанный файл CSS. | [имя файла], источник |
Команда | Описание | Выходные различия |
---|---|---|
npm run dev | Создает веб-сайт для разработки, затем запускает сервер разработки Keystone. |
|
npm run build | Создает сайт для производства. |
|
Файл конфигурации — keystone.config.js
Вариант | Описание | По умолчанию |
---|---|---|
динамические ссылки | Обеспечивает динамическую загрузку локальных ссылок на вашем веб-сайте Keystone без необходимости обновления. | истинный |
поискФайл | Создает search.json в корневом каталоге. | истинный |
индексный путь | Корневой каталог вашего сайта | '/' |
порт | Порт сервера разработки, localhost: 8080. | 8080 |
портВС | Второй порт, используемый для сервера разработки. | 8081 |
девсерверип | Местоположение сервера разработки: localhost : 8080. Замените локальный IP-адрес вашего устройства, чтобы просмотреть сервер разработки на локальных устройствах (пример: «192.168.1.103»). | 'локальный хост' |
смотрел | Каталоги, отслеживаемые сервером разработки Keystone, которые вызывают перекомпиляцию и обновление страницы при редактировании файлов. | ['шаблоны', 'страницы', 'активы', 'компоненты', 'источник', 'стили'] |
строить | Каталог страницы контента | "страницы" |
служил | Каталог, содержащий сгенерированный веб-сайт | 'общественный' |
полная перекомпиляция | Принудительно выполнить полную перекомпиляцию всех файлов после каждого изменения файла в режиме разработки. | ЛОЖЬ |
| empty-keystone-project
--| .git/
--| assets/
--| components/
--| pages/
--| src/
--| styles/
--| templates/
--| keystone.config.js
--| package.json
--| package-lock.json
Если после установки и запуска примера у вас возникла ошибка PLUGIN_ERROR, это проблема Babel, для ее устранения выполните следующую команду:
npm install @babel/core @babel/preset-env --save-dev