Top Banner
TARS, сделай уровень frontend-рутины 0% Артем Малко [email protected] @malko_artem
64

TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Jul 25, 2015

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

TARS, сделай уровеньfrontend-рутины 0%Артем Малко

[email protected] @malko_artem

Page 2: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Над чем работаю• Инфопортал info.2gis.ru

• Techno techno.2gis.ru

• Лендинги и promo

2

Page 3: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Я сильнострадал

Page 4: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Копипаст html

Page 5: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Подготовкаграфики

Page 6: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
Page 7: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
Page 8: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
Page 9: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Все должно бытьминифицировано

Page 10: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Минифицируем• Графику

• JS

• CSS

• HTML

10

Page 11: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Нужен помощник

Page 12: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Хотелось• Автоматизировать все

• Использовать уже существующие наработки

• Базовый набор функций

• Удобный инструмент

• Кроссплатформенность

12

Page 13: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Ищем готовоерешение

Page 15: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Тогда появился

Page 16: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Основные фичи• Gulp

• Выбор шаблонизатора (Jade, Handlebars, html*)

• Выбор css-препроцессора (SCSS, LESS, Stylus, css*)

• Данные отдельно от шаблона

• Модульный, легко расширяемый

16

Page 17: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Основные фичи• Работа с графикой на раз, два, три

• Конфиг на все случаи жизни

• Хорошая документация

• Создание архива готовой сборки

• и многое другое...

17

Page 18: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Основные команды• gulp init

• gulp или gulp build

• gulp dev

18

Page 19: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Основные команды• gulp init

• gulp или gulp build (--min, --release, --ie8)

• gulp dev (--lr, --tunnel, --ie8)

19

Page 20: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Структурасборщика

Page 21: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

├── gulpfile.js # gulpfile сборщика

├── tars-config.js # Конфигурационный файл

├── package.json # Зависимости TARS

├── user-package.json # Пользовательские пакеты

└── tars/ # Таски и хелперы для gulp

└── helpers/ # Хелперы

└── tasks/ # Основные таски

└── user-tasks/ # Пользовательские таски

└── watchers/ # Основные вотчеры

└── user-watchers/ # Пользовательские вотчеры

└── markup/ # Основная папка с проектом

└── modules/ # Модули

└── pages/ # Шаблоны страниц

└── static/ # Различная статика (css, js и т.п.)

└── docs/ # Документация

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

14.

15.

21

Page 22: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Модулии страницы

Page 23: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Структура модуляexampleModule/ # Пример модуля

└── assets/ # Различная статика для текущего модуля

└── ie/ # Cтили для ie8 и ie9 (ie9/ie8.scss|less|styl)

└── data/ # Папка для хранения данных для модуля

├── data.js # Данные для модуля в виде js-объекта

├── exampleModule.html # Html|Jade-представления модуля

├── exampleModule.scss|less|styl # Scss|Less|Stylus-представление модуля

├── exampleModule.js # Js-представление модуля

01.

02.

03.

04.

05.

06.

07.

08.

23

Page 24: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Примериспользования

Page 25: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Верстаем меню

25

Page 26: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Html-представление<nav class="menu {{#if mod}}_{{mod}}{{/if}}">

<ul class="menu__list">

{{#each list}}

<li class="menu__listItem">

<a href="{{url}}" class="menu__listItemLink">

{{{title}}}

</a>

<li>

{{/each}}

</ul>

</nav>

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

26

Page 27: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Data-представлениеmenu: {

top: {

mod: 'top',

list: [

{

url: 'http://2gis.ru',

title: '2gis'

}, {...}

]

},

side: {...},

bottom: {...},

}

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

27

Page 28: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Используем готовый модуль<html>

<header>

{{> menu/menu menu.top}}

</header>

<aside>

{{> menu/menu menu.side}}

</aside>

<footer>

{{> menu/menu menu.footer}}

</footer>

</html>

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

28

Page 29: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Поговоримо статике

Page 30: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Структура папки для статикиstatic/

└── fonts/ # Шрифты

└── img/ # Картинки

└── js/ # Js

└── misc/ # Различные дополнительные файлы

└── scss/ # А тут стили

01.

02.

03.

04.

05.

06.

30

Page 31: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Структура папки для статикиstatic/

└── fonts/# Шрифты

└── img/# Картинки

└── js/# Js

└── misc/# Различные дополнительные файлы

└── scss/# А тут стили

01.

02.

03.

04.

05.

06.

31

Page 32: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

JS и CSS

Page 33: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Собираем CSS• Генерация стилей спрайтов

• Конкатинация

• Компилирование в CSS

• Autoprefixer

• Сжатие

• Добавление суффиксов min и hash

33

Page 34: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Собираем CSS• Генерация стилей спрайтов

• Конкатинация

• Компилирование в CSS

• Autoprefixer

• Сжатие

• Добавление суффиксов min и hash

34

Page 35: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Порядок сборки CSSmodules/

└── */moduleName.scss 10

static/

└── scss/

└── etc/

└── libraries/ 2

└── plugins/ 9

└── sprites-scss/ 4

└── common.scss 8

└── fonts.scss 5

└── GUI.scss 7

└── mixins.scss 3

└── normalize.scss 1

└── vars.scss 6

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

14.

35

Page 36: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Собираем JS• JSHint + JSCS

• Конкатинация

• Перенос отдельных файлов

• Удаление console.log, debugger и т.д.*

• Минификация (uglify)

• Добавление суффиксов min и hash

36

Page 37: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Собираем JS• JSHint + JSCS

• Конкатинация

• Перенос отдельных файлов

• Удаление console.log, debugger и т.д.*

• Минифкация (uglify)

• Добавление суффиксов min и hash

37

Page 38: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Порядок сборки JSmodules/

└── */moduleName.js 5

static/

└── js/

└── framework/ 1

└── libraries/ 2

└── plugins/ 3

??? 4,6

01.

02.

03.

04.

05.

06.

07.

08.

38

Page 39: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

О картинках

Page 40: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
Page 41: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Автоматизация хранения графики на проекте Online4

Тимофей Чаптыков

[email protected] @chaptykov

41

Page 42: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Всего два миксина

@include bg($png-image-name); #png-sprite

@include bg-svg($svg-image-name); #svg-sprite

01.

02.

42

Page 43: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
Page 44: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Исходник SVG-файлы gulp-svg...

Спрайт

imagemin

SVG

SVG

SVG

Спрайт Спрайт

CSS CSS

main.css

PNG

gulp-concat

Спрайт

imagemin

PNGPNG

Спрайт Спрайт

CSS CSS

main-ie8.cssgulp-concat

spritesmithPNG-файлы

svg2png

Page 45: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Исходник SVG-файлы gulp-svg...

Спрайт

imagemin

SVG

SVG

SVG

Спрайт Спрайт

CSS CSS

main.css

PNG

gulp-concat

Спрайт

imagemin

PNGPNG

Спрайт Спрайт

CSS CSS

main-ie8.cssgulp-concat

spritesmithPNG-файлы

svg2png

Page 46: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

О таскахи вотчерах

Page 47: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Структура таска

47

Page 48: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Системные таски├── gulpfile.js # gulpfile сборщика

├── tars-config.js # Конфигурационный файл

├── package.json # Зависимости TARS

├── user-package.json # Пользовательские пакеты

└── tars/ # Таски и хелперы для gulp

└── helpers/ # Хелперы

└── tasks/ # Основные таски

└── user-tasks/ # Пользовательские таски

└── watchers/ # Основные вотчеры

└── user-watchers/ # Пользовательские вотчеры

└── markup/ # Основная папка с проектом

└── docs/ # Документация

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

48

Page 49: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Пользовательские таски├── gulpfile.js # gulpfile сборщика

├── tars-config.js # Конфигурационный файл

├── package.json # Зависимости TARS

├── user-package.json # Пользовательские пакеты

└── tars/ # Таски и хелперы для gulp

└── helpers/ # Хелперы

└── tasks/ # Основные таски

└── user-tasks/ # Пользовательские таски

└── watchers/ # Основные вотчеры

└── user-watchers/ # Пользовательские вотчеры

└── markup/ # Основная папка с проектом

└── docs/ # Документация

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

49

Page 50: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Структура вотчераrequire dependencies;

module.exports = function(watchOptions) {

return chokidar.watch('markup/controller/*.js', {

ignored: '',

persistent: true,

ignoreInitial: true

}).on('all', function(event, path) {

watcherLog(event, path);

gulp.start('js:processing');

});

};

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

50

Page 51: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Системные вотчеры├── gulpfile.js # gulpfile сборщика

├── tars-config.js # Конфигурационный файл

├── package.json # Зависимости TARS

├── user-package.json # Пользовательские пакеты

└── tars/ # Таски и хелперы для gulp

└── helpers/ # Хелперы

└── tasks/ # Основные таски

└── user-tasks/ # Пользовательские таски

└── watchers/ # Основные вотчеры

└── user-watchers/ # Пользовательские вотчеры

└── markup/ # Основная папка с проектом

└── docs/ # Документация

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

51

Page 52: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Пользовательские вотчеры├── gulpfile.js # gulpfile сборщика

├── tars-config.js # Конфигурационный файл

├── package.json # Зависимости TARS

├── user-package.json # Пользовательские пакеты

└── tars/ # Таски и хелперы для gulp

└── helpers/ # Хелперы

└── tasks/ # Основные таски

└── user-tasks/ # Пользовательские таски

└── watchers/ # Основные вотчеры

└── user-watchers/ # Пользовательские вотчеры

└── markup/ # Основная папка с проектом

└── docs/ # Документация

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

52

Page 53: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
Page 54: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Модульность — это удобно!

Page 55: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Результаты

Page 56: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Что получилось• Автоматизируем по полной

• Все в одном

• Модульная структура

• Удобное API

56

Page 57: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Сколько выигрываем по времениПо-старому С TARS

HTML 8 часов 5.5 часов

Работа с графикой 6 часов 2 часа

JS и CSS 10 часов 8 часов

Поддержка проекта 2 часа 30 минут

57

Page 58: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Планы набудущее

Page 59: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Планы на будущее• Gulp 4

• Добавить шаблонизаторы

• Добавить пре- и пост-процессоров для css

• ES6

• Browserify/webpack

• Другой workflow для SVG

59

Page 60: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Планы на будущее• Gulp 4

• Добавить шаблонизаторы

• Добавить пре- и пост-процессоров для css

• ES6

• Browserify/webpack/systemJs

• Другой workflow для SVG

• ...

60

Page 61: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

ПрисылайтеPull request'ы

Page 62: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Создавайте issues

Page 63: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Используйте TARS,уменьшите уровень рутины до 0%

Page 64: TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС

Артем Малко

[email protected]

@malko_artem

https://github.com/artem_malko/tars