# Стартовый проект сgulp  [](https://david-dm.org/nicothin/NTH-start-project?type=dev) [](https://david-dm.org/nicothin/NTH-start-project)
# Стартовый проект сgulp  [](https://david-dm.org/nicothin/NTH-start-project?type=dev) [](https://david-dm.org/nicothin/NTH-start-project)
## Структура проекта
## Структура проекта
...
@@ -20,64 +20,65 @@ src/
...
@@ -20,64 +20,65 @@ src/
При `npm start` (запускается дефолтная задача gulp):
При `npm start` (запускается дефолтная задача gulp):
1. Создаётся глобальный объект `nth` снастройками проекта.
1. Создаётся глобальный объект `nth` снастройками проекта.
5. Очищается папка сборки (`build/`).
5. Очищается папка сборки (`build/`).
5. Записывается `src/pug/mixins.pug` и компилируются файлы страниц (`./src/pages/**/*`).
5. Записывается `src/pug/mixins.pug` и компилируются файлы страниц (`src/pages/**/*`).
5. Из скомпилированных страниц извлекаются все классы уровня БЭМ-блока и записываются в `nth.blocksFromHtml`.
5. Из скомпилированных страниц извлекаются все классы уровня БЭМ-блока и записываются в `nth.blocksFromHtml`.
5. Генерируются спрайты, в папку сборки копируются доп. файлы и картинки.
5. Генерируются спрайты, в папку сборки копируются доп. файлы и картинки.
5. Записывается `./src/scss/style.scss`, в котором:
5. Записывается `src/scss/style.scss`, в котором:
- Импорты файлов из `config.js#addStyleBefore`.
- Импорты файлов из `config.js#addStyleBefore`.
- Импорты файлов БЭМ-блоков, использующихся на проекте (если их scss-файлы существуют).
- Импорты файлов БЭМ-блоков, использующихся на проекте (если их scss-файлы существуют).
- Импорты файлов из `config.js#addStyleAfter`.
- Импорты файлов из `config.js#addStyleAfter`.
5. Записывается `./src/js/entry.js`, в котором:
5. Записывается `src/js/entry.js`, в котором:
-`require` файлов из `config.js#addJsBefore`.
-`require` файлов из `config.js#addJsBefore`.
-`require` файлов БЭМ-блоков, использующихся на проекте (если их js-файлы существуют).
-`require` файлов БЭМ-блоков, использующихся на проекте (если их js-файлы существуют).
-`require` файлов из `config.js#addJsAfter`.
-`require` файлов из `config.js#addJsAfter`.
5. Компилируются и обрабатываются PostCSS-ом стили (`./src/scss/style.scss`), собирается скрипт (`./src/js/entry.js`).
5. Компилируются и обрабатываются PostCSS-ом стили (`src/scss/style.scss`), собирается скрипт (`src/js/entry.js`).
5. Запускается локальный сервер ислежение за файлами для пересборки.
5. Запускается локальный сервер ислежение за файлами для пересборки.
## Прочие команды
## Прочие команды
`npm run build` — Сборка со сжатыми css- иjs-файлами
`npm run build` — Сборка со сжатыми css- иjs-файлами
`npm run deploy` — Сборка проекта без карт кода и отправка содержимого папки сборки на gh-pages
`npm run deploy` — Сборка проекта без карт кода и отправка содержимого папки сборки на gh-pages
## Как начать новый проект c этим репозиторием
## Как начать новый проект c этим репозиторием
1. Клонировать этот репозиторий в новую папку (`git clone https://github.com/nicothin/NTH-start-project.git new-project`, см. [шпаргалку](https://github.com/nicothin/web-development/tree/master/git#%D0%9A%D0%BB%D0%BE%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D1%8F)) и зайти в неё (`cd new-project`).
1. Клонировать этот репозиторий в новую папку (`git clone https://github.com/nicothin/NTH-start-project.git new-project`, см. [шпаргалку](https://github.com/nicothin/web-development/tree/master/git#%D0%9A%D0%BB%D0%BE%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D1%8F)) и зайти в неё (`cd new-project`).
2. Стереть историю разработки этого репозитория (`rm -rf .git`), инициировать новый (`git init`), создать удалённый репозиторий ипривязать его (`git remote add origin АДРЕС`, см. [шпаргалку](https://github.com/nicothin/web-development/tree/master/git#%D0%A3%D0%B4%D0%B0%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D0%B5-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B8)).
2. Стереть историю разработки этого репозитория (`rm -rf .git`), инициировать новый (`git init`), создать удалённый репозиторий ипривязать его (`git remote add origin АДРЕС`, см. [шпаргалку](https://github.com/nicothin/web-development/tree/master/git#%D0%A3%D0%B4%D0%B0%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D0%B5-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B8)).
3. Отредактировать `LICENSE`, `README.md`, `package.json` (название проекта, автор, лицензия, необходимые пакеты и пр.) и `config.js` (нужные на проекте блоки, сторонние пакеты). Удалив пакет из `package.json`, не забудьте убрать его из `config.js`.
3. Отредактировать `LICENSE`, `README.md`, `package.json` (название проекта, автор, лицензия, необходимые пакеты и пр.) и `config.js` (нужные на проекте блоки, сторонние пакеты). Удалив пакет из `package.json`, не забудьте убрать его из `config.js`.
4. Установить зависимости (`npm i`).
4. Установить зависимости (`npm i`).
5. Запустить сервер разработки (`npm start`).
5. Запустить сервер разработки (`npm start`).
6. Возможно, удалить страницу библиотеки блоков (`src/pages/blocks-demo.pug`).
## Парадигма
## Парадигма
- Именование классов по БЭМ, разметка в[pug](https://pugjs.org/) и стилизация [Sass](http://sass-lang.com/). См. [Как работать с CSS-препроцессорами и БЭМ](http://nicothin.github.io/idiomatic-pre-CSS/)
- Именование классов по БЭМ, разметка в[pug](https://pugjs.org/) и стилизация [Sass](http://sass-lang.com/). См. [Как работать с CSS-препроцессорами и БЭМ](http://nicothin.github.io/idiomatic-pre-CSS/)
- Каждый БЭМ-блок всвоей папке внутри `src/blocks/`.
- Каждый БЭМ-блок всвоей папке внутри `src/blocks/`.
- Список использованных в проекте доп. файлов указан в `config.js`.
- Список использованных в проекте доп. файлов указан в `config.js`.
- Есть глобальные файлы: стилевые (стили печати), js (по умолчанию пуст), шрифты, картинки.
- Есть глобальные файлы: стилевые (стили печати), js (по умолчанию пуст), шрифты, картинки.
- Список pug-примесей `src/pug/mixins.pug` генерируется автоматически, содержит `include` всех существующих pug-файлов блоков.
- Список pug-примесей `src/pug/mixins.pug` генерируется автоматически, содержит `include` всех существующих pug-файлов блоков.
- Входная точка обработки js (`src/js/entry.js`) генерируется автоматически.
- Входная точка обработки js (`src/js/entry.js`) генерируется автоматически.
- Перед созданием коммита запускается проверка файлов, входящих в коммит. При наличии ошибок коммит не происходит, ошибки будут выведены в терминал.
- Перед созданием коммита запускается проверка файлов, входящих в коммит. При наличии ошибок коммит не происходит, ошибки будут выведены в терминал.
- Есть механизм быстрого создания нового блока: `node createBlock.js new-block` (создаёт файлы, папки).
- Есть механизм быстрого создания нового блока: `node createBlock.js new-block` (создаёт файлы, папки).
## Разметка
## Разметка
Используется [pug](https://pugjs.org/api/getting-started.html). HTML никак необрабатывается.
Используется [pug](https://pugjs.org/api/getting-started.html). HTML никак необрабатывается.
По умолчанию используются [наследование шаблонов](https://pugjs.org/language/inheritance.html) — все страницы (см. `src/index.pug`) являются расширениями шаблонов, в страницах описывается только содержимое «шапки», «подвала» и контентной области посредством [блоков](https://pugjs.org/language/inheritance.html#block-append-prepend).
По умолчанию используются [наследование шаблонов](https://pugjs.org/language/inheritance.html) — все страницы (см. `src/index.pug`) являются расширениями шаблонов, в страницах описывается только содержимое «шапки», «подвала» и контентной области посредством [блоков](https://pugjs.org/language/inheritance.html#block-append-prepend).
Каждый блок (в`src/blocks/`) может содержать pug-файл с одноименной примесью, который будет взят includ-ом в файле `src/pug/mixins.pug`.
Каждый блок (в`src/blocks/`) может содержать pug-файл с одноименной примесью, который будет взят includ-ом в файле `src/pug/mixins.pug`.
## Стили
## Стили
Диспетчер подключений (`src/scss/style.scss`) формируется автоматически, писать внего что-либо руками бессмысленно: при старте автоматизации файл будет перезаписан.
Диспетчер подключений (`src/scss/style.scss`) формируется автоматически, писать внего что-либо руками бессмысленно: при старте автоматизации файл будет перезаписан.
По умолчанию в сборку берётся [файл с примесями](https://github.com/nicothin/NTH-start-project/blob/master/src/scss/mixins/grid-mixins.scss), возвращающими правила модульной сетки. Никаких селекторов в CSS не добавляет, нужно писать семантические селекторы и вызывать примеси, передавая им настройки сетки. Настройки по умолчанию вынесены в переменные (`$grid-columns: 12;` и `$grid-gutter-width: 30px;`).
По умолчанию в сборку берётся [файл с примесями](https://github.com/nicothin/NTH-start-project/blob/master/src/scss/mixins/grid-mixins.scss), возвращающими правила модульной сетки. Никаких селекторов в CSS не добавляет, нужно писать семантические селекторы и вызывать примеси, передавая им настройки сетки. Настройки по умолчанию вынесены в переменные (`$grid-columns: 12;` и `$grid-gutter-width: 30px;`).
Посмотреть примеры и попробовать вживую можно в [этом примере с codepen.io](https://codepen.io/nicothin/pen/aJEOwE?editors=1100).
Посмотреть примеры и попробовать вживую можно в [этом примере с codepen.io](https://codepen.io/nicothin/pen/aJEOwE?editors=1100).
## Блоки
## Блоки
Каждый блок лежит в`src/blocks/` в своей папке.
Каждый блок лежит в`src/blocks/` в своей папке.
Возможное содержимое блока:
Возможное содержимое блока:
```bash
```bash
demo-block/ # Папка блока.
demo-block/ # Папка блока.
bg-img/ # Изображения для использования в стилях (не обрабатываются автоматикой сборки).
bg-img/ # Изображения для использования в стилях (не обрабатываются автоматикой сборки).