GithubHelp home page GithubHelp logo

tmpl's Introduction

Базовый шаблон проекта.

На борту:


  • gulp 4 - Gulp.js
  • webpack 4 - сборка JavaScript
  • eslint - линтер JavaScript airbnb-base
  • babel - транспайлер JavaScript
  • gulp-autoprefixer
  • gulp-pug - шаблонизатор PUG (Jade)
  • gulp-sass - препроцесоор стилей
  • gulp-stylelint - линтер SCSS — config-sass-guidelines
  • gulp-group-css-media-queries - группировка стилей по media-queries
  • autoprefixer-stylus - подстановка вендорских префиксов в CSS
  • gulp-csso - минификация CSS
  • gulp-svg-sprite - генератор SVG-спрайтов
  • browser-sync - сервер и синхронное тестирование сайта в браузерах

Перед началом работы

Для работы шаблона необходимо установить nodejs

Установка шаблона

$ git clone https://github.com/econavi/tmpl.git <project-name>
$ cd <project-name>
$ npm install

По окончанию выполнения будут установлены все необходимые пакеты.

Задачи Gulp

  • $ gulp dev - запуск шаблона для разработки с отслеживанием изменений
  • $ npm run public - полная сборка проекта на production
  • $ gulp html - компиляция Pug
  • $ gulp styles - компиляция Stylus
  • $ gulp scripts - сборка JS
  • $ gulp images - копирование изображений в папку public/
  • $ gulp fonts - копирование шрифтов в папку public/
  • $ gulp misc - копирования файлов типа robots.txt и т.п., в корень проекта
  • $ gulp iconsSvg - сборка спрайта для SVG иконок
  • $ gulp clean - очистка папки pablic/
  • $ gulp server - запуск локального сервера с автоматической перезагрузкой браузера
  • $ gulp watch - запуск отслеживания изменнений в файлах
  • $ gulp build - полная сборка проекта

Структура папок и файлов:

├── app/                         # Исходники
│   ├── assets/                  # Статические файлы для копирования в `public/`
│   │       ├── fonts/           # Файлы со шрифтами
│   │       ├── icons/           # Наборы иконок для спрайтов
│   │       │   └── svg/         # SVG иконки для генерации векторного спрайта
│   │       ├── img/             # Растровая и векторная графика
│   │       │   ├── content/     # Изображения для контента
│   │       │   ├── favicons/    # Набор favicons для проекта
│   │       │   └── general/     # Изображения для стилизации
│   │       └── misc/            # Общие файлы, которые будут перемещены в корень собранного проекта
│   ├── blocks/                  # Блоки
│   │   └── block/               # Блок
│   │       ├── block.pug        # Разметка блока
│   │       ├── block.js         # Скрипт блока
│   │       └── block.scss       # Стили блока
│   ├── pug/                     # Файлы с разметкой
│   │   ├── index.pug            # Разметка главной страницы
│   │   ├── pages/               # Внутренние страницы
│   │   │   └── inner-page.pug   # Страница второго уровня вложенности
│   │   └── templates/           # Шаблоны разметки
│   │       ├── head.pug         # <head>
│   │       └── default.pug      # Дефолтный шаблон
│   ├── scripts/                 # Скрипты
│   │   └── app.js               # Главный скрипт
│   └── styles/                  # Стили
│       ├── helpers/             # Помощники
│       │   ├── base.scss        # Базовые стили проекта
│       │   ├── fonts.scss       # Подключение шрифтов
│       │   ├── mixins.scss      # Примеси
│       │   ├── normalize.scss   # Сброс стилей и фиксы
│       │   ├── svg-size.scss    # Переменные с размерами SVG спрайта (автосборка)
│       │   └── variables.scss   # Переменные
│       └── app.scss             # Главный стилевой файл
├── public/                      # Сборка проекта для паблика (автогенерация)
├── tasks/                       # Задачи для Gulp
├── .editorconfig                # Конфигурация настроек редактора
├── .eslintrc                    # Конфигурация проверки JavaScript в ESLint
├── .stylelintrc                 # Конфигурация проверки SCSS
├── .gitignore                   # Список исключённых файлов из Git
├── browserlist                  # Список версий браузеров для Autoprefixer
├── createBlock.js               # Утилита создания новых блоков
├── gulpfile.js                  # Файл для запуска задач Gulp
├── package.json                 # Список модулей и прочей информации
├── readme.md                    # Документация шаблона
└── svg-sprite-template          # Шаблон для сборки SVG спрайта

Принципы работы

После запуска шаблона командой $ gulp dev или просто $ gulp (по умолчанию), происходит сборка проекта с отслеживанием изменений всех файлов в каталоге app/, на всех уровнях вложенности.

В дальнейшем вся разработка должна осуществляться в каталоге app/.

HTML разметка страниц

Для HTML разметки, в проекте применяется шаблонизатор Pug (бывший Jade), главным преимуществом которого, является возможность создавать шаблоны для целых разделов или отдельных страниц внутри проекта.

Все страницы и их шаблоны размещены в папках app/pug/pages/ и app/pug/templates/ соответственно.

Структура страниц и их шаблонов имеет следующий вид:

pug/
├── pages/
│   ├── lev1/index.pug
│   │   └── lev2/index.pug
│   └── index.pug
│
└── templates/
    └── default/
        ├── head.pug
        └── template.pug

По умолчанию, в папке templates/ расположен единственный шаблон default/.
Шаблонов может быть любое количество.
Рекомендуется под каждый шаблон заводить отдельную папку.

Шаблон default/ содержит внутри себя два файла:

  • head.pug - элемент <head> содержащий метаданные, линки на файлы со стилями и т.п.
  • template.pug - сам шаблон, в который подключаются элемент , скрипты и прочие неизменные блоки, необходимые для каждой страницы сайта, такие как header, footer, sidebar, menu и пр.

Если в каких-либо подключенных блоках на проекте нет необходимости, они либо комментируются, либо удаляются из соответствующих строк кода внутри template.pug.

Папка pages/ содержит саму структуру сайта и располагает в себе:

  • index.pug - файл для главной страницы.
  • lev1/index.pug - раздел первого уровня вложенности от главной страницы.
  • lev2/index.pug - раздел второго уровня вложенности от главной страницы (расположен внутри lev1/).

Структура сайта может иметь любое количество уровней вложенности.

Разделы lev1/ и lev2/ должны быть переименованы под соответствующие нужды или удалены вовсе, например, если разрабатывается SPA.

Каждая страница сайта должна содержать минимально-необходимый набор строк кода, а именно:

  • подключаемый шаблон
  • относительный путь до корня сайта
  • заголовок страницы
  • описание страницы (по желанию)
  • блок с основным контентом

На примерах:

/* Для главной страницы `pages/index.pug` */

extends ../templates/default/template.pug
block head  
    - var path = '';  
    - var pageTitle = 'Главная страница';  
    - var pageDescription = 'Описание главной страницы';  
block content  
    ...


/* Для страницы `pages/lev1/index.pug` */

extends ../../templates/default/template.pug
block head  
    - var path = '../';  
    - var pageTitle = 'Раздел первого уровня';  
    - var pageDescription = 'Описание раздела первого уровня';  
block content  
    ...


/* Для страницы `pages/lev1/lev2/index.pug` */

extends ../../../templates/default/template.pug
block head  
    - var path = '../../';  
    - var pageTitle = 'Раздел второго уровня';  
    - var pageDescription = 'Описание раздела второго уровня';  
block content  
    ...

При запуске шаблона $ gulp dev или сборки проекта на production $ npm run public, все страницы из папки app/pug/pages/ будут скомпилированы в HTML код и размещены в папке public/, сохраняя свою файловую структуру.

При запущенном шаблоне, любое изменение .pug файлов, внутри папки app/, приведет к немедленной перекомпиляции в папке public/.

SVG спрайты (иконки)

├── app/                         
│   ├── assets/                  
│   │       ├── icons/           
│   │       │   └── svg/         # SVG иконки для генерации векторного спрайта

Подключение на страницу через миксин.
Примеры:

+icon('file_name')  
+icon('file_name'[, 'class_name'])

Создание нового блока

Для создания нескольких блоков, названия нужно указывать через пробел.

npm run make-block [имя-блока] [имя-блока]

tmpl's People

Contributors

econavi avatar

Stargazers

 avatar Andrii Hrynenko avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.