Владимир Гриненко "Инструменты фронтенд-разработчика"

76
Разработчик интерфейсов Владимир Гриненко Инструменты фронтенд- разработчика Я.Субботник, Рига, 6 апреля 2013 года

description

Вместо того чтобы служить роботам, мы пишем код для людей: его приятно писать, удобно читать и легко понимать. При этом нам больше не нужно делать рутинную работу, всё автоматизировано специально разработанными инструментами. Они превращают красивый код в эффективный. Мы заставили роботов работать на разработчика, о чём и хотим рассказать. Кроме того, в докладе прозвучат идеи и советы, как написать свой собственный инструмент, если вам не достает существующего арсенала.

Transcript of Владимир Гриненко "Инструменты фронтенд-разработчика"

Page 1: Владимир Гриненко "Инструменты фронтенд-разработчика"

Разработчик интерфейсовВладимир Гриненко

Инструменты фронтенд-разработчика

Я.Субботник, Рига, 6 апреля 2013 года

Page 2: Владимир Гриненко "Инструменты фронтенд-разработчика"

— из Симферополя— разрабатываю интерфейсы— занимаюсь bem.info— помогаю осваивать БЭМ внешним разработчикам— вне Яндекса не один год разрабатывал сайты и консультировал команды различного уровня

Обо мне

2

[email protected]@tadatuta

Page 3: Владимир Гриненко "Инструменты фронтенд-разработчика"

Инструменты фронтенд-разработчика

3

Page 4: Владимир Гриненко "Инструменты фронтенд-разработчика"

Инструменты фронтенд-разработчика

4

Page 5: Владимир Гриненко "Инструменты фронтенд-разработчика"

Инструменты фронтенд-разработчика

• Оптимизаторы• Системы сборки

5

Page 6: Владимир Гриненко "Инструменты фронтенд-разработчика"

Инструменты фронтенд-разработчика

• Оптимизаторы• Системы сборки

Бонус: как написать свои инструменты

6

Page 7: Владимир Гриненко "Инструменты фронтенд-разработчика"

Инструменты фронтенд-разработчика

• Open source

7

Page 8: Владимир Гриненко "Инструменты фронтенд-разработчика"

Инструменты фронтенд-разработчика

• Open source• Написаны на JavaScript под node.js

8

Page 9: Владимир Гриненко "Инструменты фронтенд-разработчика"

Инструменты фронтенд-разработчика

• Open source• Написаны на JavaScript под node.js• Являются уникальными либо лучшими на рынке

9

Page 11: Владимир Гриненко "Инструменты фронтенд-разработчика"

CSSO

Page 12: Владимир Гриненко "Инструменты фронтенд-разработчика"

CSSO

12

/* Use shorthand */.super-box { margin-top: 9px; margin-right: 8px; margin-bottom: 0; margin-left: 5px; margin: 9px 8px 0 5px;}

Page 13: Владимир Гриненко "Инструменты фронтенд-разработчика"

CSSO

12

/* Use shorthand */.super-box { margin-top: 9px; margin-right: 8px; margin-bottom: 0; margin-left: 5px; margin: 9px 8px 0 5px;}

/* Numeric font-weight */.about { font-weight: bold; font-weight: 700;}

Page 14: Владимир Гриненко "Инструменты фронтенд-разработчика"

CSSO

12

/* Use shorthand */.super-box { margin-top: 9px; margin-right: 8px; margin-bottom: 0; margin-left: 5px; margin: 9px 8px 0 5px;}

/* Numeric font-weight */.about { font-weight: bold; font-weight: 700;}/* Shorter color code */.menu { color: yellow; color: #FF0; background-color: #F00; background-color: red;}

Page 15: Владимир Гриненко "Инструменты фронтенд-разработчика"

CSSO

13

BEFORE.test1 { border: none; background-color: red; margin-top: 2em; margin-left: 4px; margin-bottom:3px; margin-right: 0.1em; font-weight: bold;}

.test2 { border: none; font-weight: normal;}

.test3 { margin-top: 2em; margin-bottom: 2em; margin-right: 2em; margin-left: 2em;

AFTER.test1 { background-color: red; margin: 2em .1em 3px 4px; font-weight: 700}

.test1, .test2 { border: none; font-weight: 400}

.test3 { margin: 2em;

Page 17: Владимир Гриненко "Инструменты фронтенд-разработчика"

SVGO

Page 18: Владимир Гриненко "Инструменты фронтенд-разработчика"

SVGO

• Размер•Скорость парсинга•Скорость рендеринга

16

Page 19: Владимир Гриненко "Инструменты фронтенд-разработчика"

<?xml version="1.0" encoding="utf-8"?>

<!-- Generator: Adobe Illustrator 15.0.0,SVG Export Plug-In. SVG Version: 6.00 Build 0) -->

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="120px" height="120px" viewBox="0 0 120 120" enable-background="new 0 0 120 120" xml:space="preserve"> <g> <g> <circle fill="#ff0000" cx="60px" cy="60px" r="50px"/> </g> </g></svg>

SVGO

17

Page 20: Владимир Гриненко "Инструменты фронтенд-разработчика"

<?xml version="1.0" encoding="utf-8"?>

<!-- Generator: Adobe Illustrator 15.0.0,SVG Export Plug-In. SVG Version: 6.00 Build 0) -->

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="120px" height="120px" viewBox="0 0 120 120" enable-background="new 0 0 120 120" xml:space="preserve"> <g> <g> <circle fill="#ff0000" cx="60px" cy="60px" r="50px"/> </g> </g></svg>

SVGO

18

Page 21: Владимир Гриненко "Инструменты фронтенд-разработчика"

<?xml version="1.0" encoding="utf-8"?>

<!-- Generator: Adobe Illustrator 15.0.0,SVG Export Plug-In. SVG Version: 6.00 Build 0) -->

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="120px" height="120px" viewBox="0 0 120 120" enable-background="new 0 0 120 120" xml:space="preserve"> <g> <g> <circle fill="#ff0000" cx="60px" cy="60px" r="50px"/> </g> </g></svg>

SVGO

19

Page 22: Владимир Гриненко "Инструменты фронтенд-разработчика"

<?xml version="1.0" encoding="utf-8"?>

<!-- Generator: Adobe Illustrator 15.0.0,SVG Export Plug-In. SVG Version: 6.00 Build 0) -->

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="120px" height="120px" viewBox="0 0 120 120" enable-background="new 0 0 120 120" xml:space="preserve"> <g> <g> <circle fill="#ff0000" cx="60px" cy="60px" r="50px"/> </g> </g></svg>

SVGO

20

Page 23: Владимир Гриненко "Инструменты фронтенд-разработчика"

<?xml version="1.0" encoding="utf-8"?>

<!-- Generator: Adobe Illustrator 15.0.0,SVG Export Plug-In. SVG Version: 6.00 Build 0) -->

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="120px" height="120px" viewBox="0 0 120 120" enable-background="new 0 0 120 120" xml:space="preserve"> <g> <g> <circle fill="#ff0000" cx="60px" cy="60px" r="50px"/> </g> </g></svg>

SVGO

21

Page 24: Владимир Гриненко "Инструменты фронтенд-разработчика"

<?xml version="1.0" encoding="utf-8"?>

<!-- Generator: Adobe Illustrator 15.0.0,SVG Export Plug-In. SVG Version: 6.00 Build 0) -->

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="120px" height="120px" viewBox="0 0 120 120" enable-background="new 0 0 120 120" xml:space="preserve"> <g> <g> <circle fill="#ff0000" cx="60px" cy="60px" r="50px"/> </g> </g></svg>

SVGO

22

Page 25: Владимир Гриненко "Инструменты фронтенд-разработчика"

<?xml version="1.0" encoding="utf-8"?>

<!-- Generator: Adobe Illustrator 15.0.0,SVG Export Plug-In. SVG Version: 6.00 Build 0) -->

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="120px" height="120px" viewBox="0 0 120 120" enable-background="new 0 0 120 120" xml:space="preserve"> <g> <g> <circle fill="#ff0000" cx="60px" cy="60px" r="50px"/> </g> </g></svg>

SVGO

23

Page 26: Владимир Гриненко "Инструменты фронтенд-разработчика"

<?xml version="1.0" encoding="utf-8"?>

<!-- Generator: Adobe Illustrator 15.0.0,SVG Export Plug-In. SVG Version: 6.00 Build 0) -->

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="120px" height="120px" viewBox="0 0 120 120" enable-background="new 0 0 120 120" xml:space="preserve"> <g> <g> <circle fill="#ff0000" cx="60px" cy="60px" r="50px"/> </g> </g></svg>

SVGO

24

Page 27: Владимир Гриненко "Инструменты фронтенд-разработчика"

<?xml version="1.0" encoding="utf-8"?>

<!-- Generator: Adobe Illustrator 15.0.0,SVG Export Plug-In. SVG Version: 6.00 Build 0) -->

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="120px" height="120px" viewBox="0 0 120 120" enable-background="new 0 0 120 120" xml:space="preserve"> <g> <g> <circle fill="red" cx="60px" cy="60px" r="50px"/> </g> </g></svg>

SVGO

25

Page 28: Владимир Гриненко "Инструменты фронтенд-разработчика"

<?xml version="1.0" encoding="utf-8"?>

<!-- Generator: Adobe Illustrator 15.0.0,SVG Export Plug-In. SVG Version: 6.00 Build 0) -->

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="120px" height="120px" viewBox="0 0 120 120" enable-background="new 0 0 120 120" xml:space="preserve"> <g> <g> <circle fill="red" cx="60px" cy="60px" r="50px"/> </g> </g></svg>

SVGO

26

Page 30: Владимир Гриненко "Инструменты фронтенд-разработчика"

Borschik

Page 32: Владимир Гриненко "Инструменты фронтенд-разработчика"

blocks/block1/block1.css

.block1 { background: url(block1.png);}

borschik

30

Page 33: Владимир Гриненко "Инструменты фронтенд-разработчика"

blocks/block1/block1.css

.block1 { background: url(block1.png);}

borschik

31

blocks/block2/block2.css

.block2 { background: url(block2.png);}

Page 34: Владимир Гриненко "Инструменты фронтенд-разработчика"

borschik

32

@import url("../../blocks/block1/block1.css");@import url("../../blocks/block1/block2.css");

pages/page/page.css

blocks/block1/block1.css

.block1 { background: url(block1.png);}

blocks/block2/block2.css

.block2 { background: url(block2.png);}

Page 35: Владимир Гриненко "Инструменты фронтенд-разработчика"

Собираем

borschik -i page.css -o _page.css -t css

borschik

33

Page 36: Владимир Гриненко "Инструменты фронтенд-разработчика"

Собираем

borschik -i page.css -o _page.css -t css

borschik

34

pages/page/_page.css

/* ../../blocks/block1/block1.css */.block1 { background: url(../../blocks/block1/block1.png);}/* ../../blocks/block1/block1.css */

/* ../../blocks/block2/block2.css */.block2 { background: url(../../blocks/block2/block2.png);}/* ../../blocks/block2/block2.css */

Page 39: Владимир Гриненко "Инструменты фронтенд-разработчика"

Setochka

Page 40: Владимир Гриненко "Инструменты фронтенд-разработчика"

background: #1e5799;background: -moz-linear-gradient(top, #1e5799 0%, #2989d8 50%, #207cca 51%, #7db9e8 100%);background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#1e5799), color-stop(50%,#2989d8), color-stop(51%,#207cca), color-stop(100%,#7db9e8));background: -webkit-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);background: -o-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);background: -ms-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);background: linear-gradient(to bottom, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 );

Setochka

38

Page 41: Владимир Гриненко "Инструменты фронтенд-разработчика"

background: #1e5799;background: -moz-linear-gradient(top, #1e5799 0%, #2989d8 50%, #207cca 51%, #7db9e8 100%);background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#1e5799), color-stop(50%,#2989d8), color-stop(51%,#207cca), color-stop(100%,#7db9e8));background: -webkit-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);background: -o-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);background: -ms-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);background: linear-gradient(to bottom, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 );

Setochka

39

Page 42: Владимир Гриненко "Инструменты фронтенд-разработчика"

background: #1e5799;background: -moz-linear-gradient(top, #1e5799 0%, #2989d8 50%, #207cca 51%, #7db9e8 100%);background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#1e5799), color-stop(50%,#2989d8), color-stop(51%,#207cca), color-stop(100%,#7db9e8));background: -webkit-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);background: -o-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);background: -ms-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);background: linear-gradient(to bottom, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 );

Setochka

40

Page 43: Владимир Гриненко "Инструменты фронтенд-разработчика"

41

Page 45: Владимир Гриненко "Инструменты фронтенд-разработчика"

BEM tools

Page 46: Владимир Гриненко "Инструменты фронтенд-разработчика"

BEM tools

• Создавать сущности• Собирать финальный рантайм• Работать с декларациями сборки• Поднимать dev-сервер

44

Page 47: Владимир Гриненко "Инструменты фронтенд-разработчика"

Создание сущностей

bem create block1 -T css -T js

Небритый Оккам

45

Page 48: Владимир Гриненко "Инструменты фронтенд-разработчика"

Создание сущностей

bem create block1 -T css -T js

Небритый Оккам

46

.block1{}

block1/block1.css

BEM.DOM.decl(‘block1’,{ onSetMod: { ‘js’: function() {

} }});

block1/block1.js

Page 49: Владимир Гриненко "Инструменты фронтенд-разработчика"

BEM tools

47

Чтобы понять БЭМ, сначала нужно понять БЭМ

Page 50: Владимир Гриненко "Инструменты фронтенд-разработчика"

Уровни переопределения

48

lib/blocks/block1/block1.css

.block1 { font-size: 12px; background: #ccc;}

Page 51: Владимир Гриненко "Инструменты фронтенд-разработчика"

Уровни переопределения

49

lib/blocks/block1/block1.css

.block1 { font-size: 12px; background: #ccc;}

project/blocks/block1/block1.css

.block1 { font-size: 14px; border: 1px solid;}

Page 52: Владимир Гриненко "Инструменты фронтенд-разработчика"

Уровни переопределения

50

@import url("../../../library/blocks/block1/block1.css");@import url("../../blocks/block1/block1.css");

project/pages/page/page.css

lib/blocks/block1/block1.css

.block1 { font-size: 12px; background: #ccc;}

project/blocks/block1/block1.css

.block1 { font-size: 14px; border: 1px solid;}

Page 53: Владимир Гриненко "Инструменты фронтенд-разработчика"

Декларация

51

project/pages/page/page.bemdecl.js

exports.blocks = [ { block: ‘block1’ }]

Page 54: Владимир Гриненко "Инструменты фронтенд-разработчика"

bem make

52

project/pages/page/page.bemdecl.js

Presto!

bem make

exports.blocks = [ { block: ‘block1’ }]

Page 55: Владимир Гриненко "Инструменты фронтенд-разработчика"

bem make

53

project/pages/page/page.bemdecl.js

Presto!

bem make

Blink

pages/page/page.htmlpages/page/page.csspages/page/page.jspages/page/_page.csspages/page/_page.js

exports.blocks = [ { block: ‘block1’ }]

Page 56: Владимир Гриненко "Инструменты фронтенд-разработчика"

bem make за кадром

54

bem build

Page 57: Владимир Гриненко "Инструменты фронтенд-разработчика"

bem make за кадром

55

bem build

borschik

Page 58: Владимир Гриненко "Инструменты фронтенд-разработчика"

bem make за кадром

56

bem build

borschik

csso

Page 59: Владимир Гриненко "Инструменты фронтенд-разработчика"

bem make за кадром

57

bem build

borschik

csso

uglifyjs

Page 60: Владимир Гриненко "Инструменты фронтенд-разработчика"

bem make за кадром

58

bem build

borschik

csso

uglifyjs

и еще много всего ;)

Page 61: Владимир Гриненко "Инструменты фронтенд-разработчика"

bem server за кадром

59

bem build

borschik

csso

uglifyjs

и еще много всего ;)

Page 62: Владимир Гриненко "Инструменты фронтенд-разработчика"

60

Page 63: Владимир Гриненко "Инструменты фронтенд-разработчика"

bem decl

61

bem decl merge

Page 64: Владимир Гриненко "Инструменты фронтенд-разработчика"

bem decl

62

bem decl merge

bem decl intersect

Page 65: Владимир Гриненко "Инструменты фронтенд-разработчика"

bem decl

63

bem decl merge

bem decl intersect

bem decl subtract

Page 67: Владимир Гриненко "Инструменты фронтенд-разработчика"

COA

Page 68: Владимир Гриненко "Инструменты фронтенд-разработчика"

COA

• Promises-based асинхронность• Автогенерация цветного хелпа• API при использовании в качестве node.js модуля• Автокомплит для shell• Валидация• Создание подкоманд

66

Page 69: Владимир Гриненко "Инструменты фронтенд-разработчика"

COA: быстрый старт с tpl-cli

• Использует volo• Заготовка на github• Тесты• Code coverage отчет• Интеграция с Travis Continuous Integration• Заготовки документации

67

Page 70: Владимир Гриненко "Инструменты фронтенд-разработчика"

Установка

[sudo] npm install -g volo

volo create my-tool arikon/tpl-cli

COA: быстрый старт с tpl-cli

68

Page 71: Владимир Гриненко "Инструменты фронтенд-разработчика"

require('coa').Cmd() .name(process.argv[1]) .title('My awesome command line util') .helpful() .opt() .name('version') .title('Version') .short('v') .long('version') .flag() .act(function(opts) { return JSON.parse(require('fs').readFileSync(__dirname + '/package.json')) .version; }) .end() .run(process.argv.slice(2));

COA

69

Page 73: Владимир Гриненко "Инструменты фронтенд-разработчика"

Подводя итоги

• CSSO — оптимизатор CSS• SVGO — оптимизатор SVG• Borschik — умный сБорщик текстовых файлов• Setochka — выделение свойств из CSS• BEM tools — инструменты для работы с БЭМ

Рассмотрели COA для создания собственных инструментов

71

Page 76: Владимир Гриненко "Инструменты фронтенд-разработчика"

Разработчик интерфейсов

[email protected]

Владимир Гриненко

@tadatuta