Skip to content
/ gulp-pug-tailwind Public template

Gulp-збірка для верстки з використанням шаблонізатора PUG, CSS фреймворку Tailwind CSS та препроцесора SASS

Notifications You must be signed in to change notification settings

alex-degt/gulp-pug-tailwind

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Gulp-збірка для верстки

Gulp-збірка для верстки з використанням шаблонізатора PUG, CSS фреймворку Tailwind CSS та препроцесора SASS для середніх за розміром проєктів (інтернет-магазин, корпоративний сайт, сервіс).

Файлова структура

├── .gitignore                         #
├── .editorconfig                      #
├── .prettierrc                        # налаштування Prettier (форматування)
├── gulpfile.js                        # налаштування таск-менеджеру gulp
├── package.json                       # залежності та npm-скрипти
└── src/                               #
    ├── fonts/                         # тека для шрифтів
    │   ├── roboto/                    # конкретний шрифт
    │   │   ├── roboto-100.woff2       #
    │   │   └── ...                    #
    │   └── .../                       #
    │                                  #
    ├── img/                           # тека для зображень
    │   ├── content/                   # контентні зображення (товар, зображення для блогу, банер, ...)
    │   │   ├── product.jpg            #
    │   │   └── ...                    #
    │   ├── favicon/                   # фавікон та маніфест-файл
    │   │   ├── favicon.ico            #
    │   │   └── ...                    #
    │   ├── icons/                     # інтерфейсні іконки (стрілка, пошук, чекбокс, ..)
    │   │   ├── arrow-left.svg         #
    │   │   └── ...                    #
    │   └── icons-content/             # контентні іконоки (логотипи, декоративні елементи, ..)
    │       ├── logo.svg               #
    │       └── ...                    #
    │                                  #
    ├── js/                            # тека для скриптів
    │   ├── all-pages.js               #
    │   └── ...                        #
    │                                  #
    ├── libs/                          # тека для бібліотек
    │   ├── jquery-modal/              # бібліотека
    │   │   ├── jquery-modal.min.js    #
    │   │   ├── jquery-modal.min.css   #
    │   │   └── ...                    #
    │   └── .../                       #
    │                                  #
    ├── pug/                           # тека для pug-файлів
    │   ├── gulp-pages/                # головні pug-файли (які таск-менеджер перетворить в html, назва файлу відповідає назві html-сторінки)
    │   │   ├── index.pug              # список сторінок (технічна сторінка)
    │   │   ├── home.pug               # include ../pages/home/index.pug
    │   │   ├── account.pug            # include ../pages/account/index.pug
    │   │   └── ...                    # include ../pages/_page-name_/index.pug
    │   ├── layouts/                   # глобальні pug-шаблони
    │   │   ├── main.pug               # шаблон всіх сторінок (doctype, head, meta, ...)
    │   │   ├── _header.pug            # глобальний блок (зустрічається на всіх сторінках)
    │   │   ├── ...                    #
    │   │   └── modals/                # глобальні модальні вікна (зустрічаються на всіх сторінках)
    │   │      	├── _login.pug         # глобальний блок (зустрічається на всіх сторінках)
    │   │       └── ...                #
    │   ├── pages/                     # шаблони конкретних сторінок
    │   │   ├── home/                  # сторінка та її блоки
    │   │   │   ├── index.pug          #
    │   │   │   ├── _block.pug         #
    │   │   │   └── ...                #
    │   │   ├── account/               # сторінка та її блоки
    │   │   │   ├── index.pug          #
    │   │   │   ├── _block.pug         #
    │   │   │   └── ...                #
    │   │   └── .../                   #
    │   ├── partials/                  # міксини (інпут, картка товару, ...)
    │   │   ├── +input.pug             # міксин
    │   │   └── ...                    #
    │   └── templates/                 # шаблонні елементи (хлібні крихти, пагінація, ...)
    │       ├── _breadcrumbs.pug       #
    │       └── ...                    #
    │                                  #
    └── sass/                          # тека для стилів
        ├── tailwind.css               # стильовий файл Tailwind CSS
        ├── all-pages.sass             # @import "base/*", @import "pages/all-pages/*", @import "partials/*" - загальний стильовий файл для всіх сторінок
        ├── home.sass                  # @import "pages/home/*" - загальний стильовий файл для конкретної сторінки
        ├── account.sass               # @import "pages/account/*" - загальний стильовий файл для конкретної сторінки
        ├── ...                        #
        ├── base/                      # базові стилі
        │   ├── _base.sass             #
        │   ├── _fonts.sass            #
        │   └── ...                    #
        ├── pages/                     # тека для стилів конкретних сторінок
        │   ├── all-pages/             # повторювані на всіх сторінках блоки
        │   │   ├── _header.sass       #
        │   │   └── ...                #
        │   ├── home/                  # конкретна сторінка (блоки, секції)
        │   │   ├── _block.sass        #
        │   │   └── ...                #
        │   ├── account/               # конкретна сторінка (блоки, секції)
        │   │   ├── _block.sass        #
        │   │   └── ...                #
        │   └── .../                   #
        └── partials/                  # міксини та шаблонні елементи
            ├── +input.sass            #
            ├── _breadcrumbs.sass      #
            └── ...                    #

З метою оптимізації кінцевого результату та зручності підтримки продукту кожна HTML-сторінка містить в собі:

  • загальні CSS-файли - ті, що використовуються на всіх сторінках (як власні стилі, так і бібліотеки):
    • tailwind.css
    • ...
    • all-pages.css
  • унікальні CSS-файли - ті, що використовуються лише на цій сторінці (як власні стилі, так і бібліотеки):
    • owl.carousel.min.css
    • owl.theme.default.min.css
    • ...
    • product.css
  • загальні JS-файли - ті, що використовуються на всіх сторінках (як власні скрипти, так і бібліотеки):
    • jquery.min.js
    • ...
    • all-pages.js
  • унікальні JS-файли - ті, що використовуються лише на цій сторінці (як власні скрипти, так і бібліотеки):
    • owl.carousel.min.js
    • ...
    • product.js

Загальна інформація

  • +input.pug - міксин, назва файлу завжди починається з +
  • _section.pug, _section.sass - шаблон, назва файлу завжди починається з _
  • include _section.pug - підключити pug-файл. Шлях відносно поточного файлу
  • @use _section.sass - підключити sass-файл. Шлях відносно поточного файлу
  • src/pug/layouts/main.pug => block css, block js, block content, block modal - місця, в яких буде знаходитись код з дочірніх сторінок, що наслідують цей шаблон

Старт

Необхідно мати Node.js та Npm.

  1. Встановити всі пакети:
npm i
  1. Запустити в режимі розробки:
npm run dev
  1. Зібрати production-версію:
npm run prod

Опис задач

  1. clean() - видалити вміст docs
  2. copyJs() - скопіювати js-файли з src/js/* в docs/js/ (без обробки)
  3. copyImg() - скопіювати зображення з src/img/* в docs/img/ (без обробки)
  4. copyLibs() - скопіювати бібліотеки з src/libs/* в docs/libs/ (без обробки)
  5. copyFonts() - скопіювати шрифти з src/fonts/* в docs/fonts/ (без обробки)
  6. devStyles() - обробити sass-файли з src/sass/* та покласти в docs/css
  7. prodStyles() - обробити sass-файли з src/sass/* та покласти в docs/css з постобробкою для production
  8. jade() - обробити pug-файли з src/pug/gulp-pages/* та покласти в docs/
  9. jadeProd() - обробити pug-файли з src/pug/gulp-pages/* та покласти в docs/ з постобробкою для production
  10. livePreview() - запустити локальний сервер
  11. watchFiles() - відстежувати зміну файлів
  12. previewReload() - перезавантажити сервер якщо файли змінились

Запитання і відповіді

Чому автоматично ніяк не обробляється (стискається) растрова графіка?

Особисто мені цей функціонал не потрібен. Як контентні зображення я використовую плейсхоледери, а декоративні елементи якщо вони растрові - обробляю в ручному режимі.

Чому автоматично ніяк не обробляється (стискається) векторна графіка?

Тому що постійно доводиться змінювати правила обробки від проєкту до проєкту. Якість векторної графіки в дизайні буває різною, SVG може містити в собі то растрову графіку, то скрипти, то прозорість замість кольору. Це не дуже зручно, тож прийнято рішення обробляти в ручному режимі.

Чому не використовується svg-спрайт?

Тому що з цим зручно працювати лише на етапі верстки. На етапі підтримки та розвитку проєкту коли все змінюється - важко тримати його в актуальному стані.

В sass-файлах можна знайти _HOTFIX.sass. Що це?

Цей файл створено для бекенд-розробників на той випадок, коли треба терміново щось пофіксити, але немає часу розбиратись (або він не дуже в верстку). Вони пишуть туди будь-який "брудний" код, потім я його переробляю і переношу куди потрібно.

Навіщо в файлі src/pug/layouts/main.pug є змінна var version = '?v=1'?

Ця змінна використовується для тих випадків, коли треба оновити файли верстки на хостингу з кешуванням. Зміна версії призведе до сприйняття файлу сервером як нового.

Навіщо створювати окремі css-файли під кожну сторінку?

Це зручно з точки зору оптимізації та підтримки великих проєктів.

Якщо файл all-pages.css використовується на всіх сторінках - чому він підключається на конкретній сторінці перед іншими css-файлами, а не в src/pug/layouts/main.pug?

Тому що на конкретній сторінці можуть підключатися сторонні бібліотеки. У випадку коли нам потрібно кастомізувати цю бібліотеку перезаписом стилів в all-pages.css порядок підключення файлів може мати значення.

Навіщо помаранчевий блок з посиланнями що відкривають модальні вікна?

Для бекенд-розробників, щоб завжди було очевидно що є прихованим на цій конкретній сторінці.

Корисні сторонні сервіси

Для обробки векторної графіки (svg) - SVGOMG. Для обробки растрової графіки (jpg, png, webp, ..) - Squoosh. Для генерації зображень будь-яких розмірів (плейсхолдери) - Placehold.

About

Gulp-збірка для верстки з використанням шаблонізатора PUG, CSS фреймворку Tailwind CSS та препроцесора SASS

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published