Компонентная разработка на stylus, jade, typescript - Леонид...

34
Компонентная разработка на Stylus, Jade, Typescript Леонид Ширманов - MCT, MCPD

Upload: moscowjs

Post on 08-May-2015

533 views

Category:

Internet


0 download

DESCRIPTION

Презентация с DevConf'14

TRANSCRIPT

Page 1: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Компонентная разработка на Stylus, Jade, Typescript

Леонид Ширманов - MCT, MCPD

Page 2: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Agenda

• Бенефиты компонентной разработки на фронтенде• Jade для HTML• Stylus для CSS + Jeet + Rupture• Typescript для JavaScript• Выводы

Page 3: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Что имеем в виду под компонентой

• Компонента, контрол, блок/элемент в терминах Яндекс.БЭМ• Суть в легко переиспользуемом фрагменте HTML/CSS/JS• HTML/CSS/JS переиспользуются совместно• Компоненты переиспользуются путем их размещения на

страницах• Компоненты не знают о существовании друг друга на странице

Page 4: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

В чем трудности

• Обычно мы делаем CSS, JS, HTML «модульным» по отдельности• Принципы деления на модули различны• JavaScript – CommonJS, AMD – requirejs, browserify и др.• CSS – делим по файлам, испольуем LESS, SASS• HTML – серверные контролы, клиентские шаблоны

• Backbone, Angular, Ember – это все об MVC – HTML, JS, без CSS

Page 5: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Как было бы удобно

Page 6: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Jade для HTML

http://jade-lang.com/

Page 7: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Jade для HTML

• Полноценный движок шаблонов с синтаксиcом на основе HAML• Реализации для Node.js, Java, .NET (Spark), PHP, Ruby (wrapper)• Есть все конструкции синтаксиса – условия, итерации, case• Фильтры для компиляции фрагментов на другом языке

(markdown, coffee script etc)

• Мощное средство как server-side движок в рантайме• Так почему он?

Page 8: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Jade для HTML

• Синтаксис HAML – визуально меньше текста, исключены ошибки «забыли закрыть тег», «не туда вставили фрагмент» и т.п.

• Умеет компилировать статический html• Mixins !

Page 9: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

User.jade file

-- var user = { nickname: ‘Дамский угодник 1744' }div.user if user.nickname h2 Ник-нейм: p.nickname= user.nickname else h1 Ник-нейм: p.nickname Ник-нейм не указан

Page 10: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

User.html file

<div class="user"> <h2>Ник-нейм</h2> <p class=“nickname">Дамский угодник 1744</p></div>

Page 11: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Jade mixin со строковым параметром

mixin article(title) div.article div.article-wrapper h1= title if block block else p Статья не найдена

Page 12: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Jade mixin со строковым параметром

+article(‘Погода в Москве') p Солнечно!

<div class="article"> <div class="article-wrapper"> <h1>Погода в Москве</h1> <p>Солнечно!</p> </div></div>

Page 13: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Jade для HTML

• Demo

Page 14: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Stylus для CSS

• Мощная альтернатива LESS и SASS• Яндекс.Почта писали на Хабре причины перехода на Stylus http:

//habrahabr.ru/company/yandex/blog/169415/• Mixins !

Имеет сногшибательные дополнения:• Jeet (http://jeet.gs/)• Rupture (http://jenius.github.io/rupture/)

Page 15: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Stylus mixin

rainbow(cssclass) hr.{cssclass}:before background linear-gradient(…) position absolute … hr.{cssclass}:after position absolute …

Page 16: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Jeet для Stylus

Page 17: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Jeet mixins

• column() == col() -- column(1/4, offset: 1/4)• span() -- span(1/4)• center()• stack()• unstack()• edit()• alight()• cf() -- clearfix• shift()• unshift()

Page 18: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Грид на Bootstrap-e

Page 19: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Rupture для Stylus

• Breakpoint Slicer - генерирует Media Queries• http://jenius.github.io/rupture/

• переменная scale = 0 400px 600px 800px 1050px

Page 20: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Rupture - mixins для Stylus

• +above(measure)• +from(measure)• +below(measure)• +to(measure)• +between(measure, measure)• +at(measure)

• +mobile() <= 400px• +tablet() between 400px & 1050px• +desktop() >= 1050px• +retina() pixel density >= 1.5

Page 21: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Rupture - mixins для Stylus

https://github.com/lolmaus/breakpoint-slicer

Page 22: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Stylus для CSS

• Demo

Page 23: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Typescript для JavaScript

• http://www.typescriptlang.org/• Привносит ООП в JavaScript – модули, классы, интерфейсы• Типы, дженерики, enums• Компилирует сразу в AMD или CommonJS модули• Поддержка IDE – Visual Studio, WebStorm и др.

Page 24: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Недостатки Typescript

• Без использования ООП – не дает приемуществ• ООП означает на все пишем классы и методы класса

• Для использования сторонних библиотек требуются Type Definitions https://github.com/borisyankov/DefinitelyTyped

• jquery.d.ts, require.d.ts и т.д.

Page 25: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

ООП в Typescript - классы

class User { private name: string; constructor(name: string) { this.name = name; } public displayInHeader(): string { return "Привет, " + this.name; }}

Page 26: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

ООП в Typescript - классы

var currentUser = new User("Иван");

element.textContent = currentUser.displayInHeader();

Что-то не так...

Page 27: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

ООП в Typescript - классы

class User { private name: string; constructor(name: string) { this.name = name; } public displayInHeader(element: any): void { var nameElement = ‘<span>Hello, ‘ + this.name + ‘</span>’; $(element).append(nameElement); }}

Page 28: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

ООП в Typescript - классы

var currentUser = new User("Иван");

currentUser.displayInHeader( $(‘selector’) );

Page 29: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Typescript для JavaScript

• Demo

Page 30: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Event Aggregator Pattern

• Паттерн описанный Мартином Фаулером в книге Patterns of Enterprise Application Architecture

• http://martinfowler.com/eaaDev/EventAggregator.html• Широко применяется в MVVM-фреймворках для десктопа• Это реализация событий «на принципах» ООП

Page 31: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Event Aggregator Pattern

Page 32: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Event Aggregator Pattern

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

• Потребители событий имеют ссылку на агрегатор и подписываются у него на оповещение о событиях

• Все объекты не знают друг о друге – знают только об агрегаторе

Page 33: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Event Aggregator Pattern

• Demo на Typescript

Page 34: Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Заключение

• Комбинируйте технологии, библиотеки, фреймворки• Ищите Ваш способ делать фронтенд компонентным и наработки

переиспользуемыми