src/blocks/
. Имена файлов в такой папке должны совпадать с именем блока. См. ниже про Блоки.config.js
.src/js/script.js
— общий js, берётся в сборку по умолчанию,src/scss/print.scss
— стили печати, не берутся в сборку по умолчанию (см. config.js
).src/pug/mixins.pug
генерируется автоматически и содержит include
существующих pug-файлов всех блоков.src/scss/style.scss
генерируется автоматически и содержит импорты стилевых файлов использованных в разметке блоков и импорты доп. файлов, указанных в config.js
.src/js/entry.js
) генерируется автоматически и содержит require
js-файлов использованных в разметке блоков и доп. файлов, указанных в config.js
.npm run test
), ошибки выводятся в терминал.node createBlock.js new-block
(создаёт папки и scss-файл). После имени нового блока можно дописать нужные расширения.Требуются установленный git и Node.js (LTS).
git clone https://github.com/nicothin/NTH-start-project.git my-new-project
(где my-new-project
— папка для нового проекта).cd my-new-project
).rm -rf .git
npm i
(может быть долго, особенно на Windows).npm start # запуск сервера разработки (сборка БЕЗ библиотеки блоков)
npm start deploy # отправка содержимого папки сборки на gh-pages (нужен репозиторий на github.com)
npm run build # сборка БЕЗ библиотеки блоков и без запуска сервера разработки
npm run wlib # запуск сервера разработки (сборка проекта с библиотекой блоков)
npm run test # проверка всех pug-, scss- и js-файлов на соответствие правилам (см. .pug-lintrc, .stylelintrc и eslintrc соответственно)
npm run test:pug # проверить только pug-файлы
npm run test:style # проверить только scss-файлы
npm run test:js # проверить только js-файлы
build/ # Папка сборки (результат работы над проектом)
src/ # Исходники
blocks/ # Блоки (подпапки с блоками)
favicon/ # Фавиконки (копирование прописать в config.js)
fonts/ # Шрифты (копирование прописать в config.js, подключение в src/blocks/page/page.scss)
img/ # Общие для всех блоков изображения (копирование прописать в config.js)
js/ # Общие js-файлы, в т.ч. точка сборки для webpack и общие модули
pages/ # Страницы проекта (при компиляции: src/pages/index.pug → build/index.html)
pug/ # Служебные pug-файлы (шаблоны страниц, примеси)
scss/ # Служебные стилевые файлы (диспетчер подключений, переменные, примеси)
При npm start
запускается дефолтная задача gulp:
build/
).src/pug/mixins.pug
с includ-ами pug-файлов всех блоков.src/pages/**/*.pug
в build/*.html
).addAssets
файла config.js
.src/scss/style.scss
, в котором:
addStyleBefore
файла config.js
. По умолчанию — SCSS-переменные и примеси.alwaysAddBlocks
файла config.js
. Таким образом, можно взять в сборку любой блок, даже если его css-класс не упоминается в разметке страниц.addStyleAfter
файла config.js
.src/js/entry.js
, в которой:
require
файлов из секции addJsBefore
файла config.js
.require
файлов БЭМ-блоков, использующихся в разметке.require
файлов БЭМ-блоков, упомянутых в секции alwaysAddBlocks
файла config.js
.require
файлов из секции addJsAfter
файла config.js
.src/scss/style.scss
). Результат обрабатываются плагинами PostCSS.src/js/entry.js
). Используется Webpack.Каждый блок лежит в src/blocks/
в своей папке.
Возможное содержимое блока:
demo-block/ # Папка блока.
img/ # Изображения, используемые этим блоком (копируются в папку сборки).
demo-block.pug # Разметка (pug-примесь, отдающая разметку этого блока, описание API примеси).
demo-block.scss # Стилевой файл этого блока (без стилей других блоков).
demo-block.js # js-файл блока (без скриптов других блоков).
readme.md # Описание для документации, подсказки.
page
На теге <html>
по умолчанию прописан класс page
, что делает одноимённый блок «глобальным». В стилях этого блока прописываются:
src/pug/layout.pug
),# формат: node createBlock.js ИМЯБЛОКА [доп. расширения через пробел]
node createBlock.js demo-block # создаст папку блока, demo-block.scss, подпапку img/ для этого блока
node createBlock.js demo-block pug js # создаст папку блока, demo-block.scss, demo-block.pug, demo-block.js, подпапку img/ для этого блока
Если блок уже существует, файлы не будут затёрты, но создадутся те файлы, которые ещё не существуют.
Если нужно взять в сборку сторонний модуль, то после его установки (к примеру — npm i package-name
) нужно:
require
в js-файле проектного блока (там же писать всё, что касается работы с этим модулем). Если сторонний модуль нужен без привязки к какому-либо проектому блоку, прописать require
в src/js/script.js
(см. пример в файле).addStyleBefore
файла config.js
(пример в файле).addAssets
файла config.js
с указанием в какую папку их копировать (пример в файле).Используется pug.
Все страницы (см. src/pages/index.pug
) являются расширениями шаблонов из src/pug
(см. наследование шаблонов), в страницах описывается только содержимое «шапки», «подвала» и контентной области (см. блоки).
Каждый блок (в src/blocks/
) может (не обязан) содержать одноимённый pug-файл с одноименной примесью, который при старте сервера разработки будет взят includ-ом в файл src/pug/mixins.pug
.
Диспетчер подключений (src/scss/style.scss
) формируется автоматически при старте сервера разработки.
Каждый блок (в src/blocks/
) может содержать одноимённый scss-файл со стилями этого блока. Если блок используется в разметке (или упомянут в config.js#alwaysAddBlocks
), его scss-файл будет взят в сборку стилей.
Используемый постпроцессинг:
Автопроверка с stylelint и плагинами. См. .stylelintrc
.
__
— разделитель элемента, --
— разделитель модификатора.Точка входа (src/js/entry.js
) формируется автоматически при старте сервера разработки. Точка входа обрабатывается webpack-ом (с babel-loader).
Для глобальных действий предусмотрен src/js/script.js
(см. config.js#addJsAfter
и config.js#addJsBefore
).
Каждый блок (в src/blocks/
) может (не обязан) содержать одноимённый js-файл. Если блок используется в разметке (или упомянут в config.js#alwaysAddBlocks
), его js-файл будет взят в сборку стилей.
По умолчанию в шаблоне (src/pug/layout.pug
) прописана вставка в <head>
скрипта src/js/head-script.js
, в котором для узла <html>
указано:
no-js
и добавить класс js
.touch
или no-touch
, в зависимости от типа интерфейса.--vh
со значением в 1% высоты вьюпорта (значение пересчитывается при изменении размеров).Ставьте звезду репозиторию и/или угостите меня кофе, переведя сколь угодно символическую сумму.