SlideShare a Scribd company logo
1 of 35
Спикер:
Тема презентации:
Кашеверов Александр
Пара слов о веб – приложениях и
что такое Gulp
Кто я
Web разработчик
О чём расскажу
Front-end
Немного истории
Пример
Gulp vs Grunt
Шёл...
1996...
Год...
Шёл...
2015...
Год...
Схема №1
Front-End + Back-End=
Схема №2
С этого момента
поподробнее
Evolution of the Web
Evolution of the Web
Evolution of the Web
Много умных слов
HTML
CSS
JavaScript
jQuery
CSS3
HTML5
ajax
Backbone IEsvg
Angular
Twitter Bootstrap
WebStorage
D3.js
prototype
mootools
sencha
Responsive layout
WebWorker
Cookies
Gulp
Grunt
Coffeescript
JSON
HTTP
flash
Canvas
Polymer
ReactJS
Много умных слов
HTML
CSS
JavaScript
Всё было бы не так интересно без Javascript
• 1995 – Брендан Айк из Netscape (Firefox) внедрил ЯП в браузер. Цель - изменение структуры
без перезагрузки страницы
• 1996 – Jscript. Microsoft выпустила аналог языка JavaScript.
• 2005 – ajax, prototype.js, jQuery, Mootools, Dojo
• 2008 – JavaScript MVC
• 2009 – NodeJS
• evolutionoftheweb.com – история развития
• Сейчас WEB без JS невозможен
“hello world” на JavaScript
1.
<script type="text/javascript">
alert("Hello world");
</script>
2.
<a href="/page" onclick="alert('Hello world');">a link</a>
3.
<script type="text/javascript" src=“/path/file.js"></script>
Пример
Пример
<div id="tabs">
<ul class="tabs" id="tabsnav">
<li><a href="#tab-1" class="menu-internal">Tab One</a></li>
<li><a href="#tab-2" class="menu-internal">Tab Two</a></li>
<li><a href="#tab-3" class="menu-internal">Tab Three</a></li>
<li><a href="#tab-4" class="menu-internal">Tab Four</a></li>
</ul>
<div id="tab-1“ class="tab">
<p>Tab1 Content</p>
</div>
<div id="tab-2“ class="tab">
<h2>Tab 2</h2>
<p>Tab 2 content</p>
</div>
<div id="tab-3“ class="tab">
<p>Tab 3 content</p>
</div>
<div id="tab-4“ class="tab">
<p>Tab 4 content.</p>
</div>
</div>
Пример – чистый javascript
var pages;
window.onload=function() {
var container = document.querySelector("#tabs");
var navitem = document.querySelector("#tab-2");
navitem.parentNode.setAttribute("class", "active");
pages = container.querySelectorAll(".tab");
for (var i = 0; i < pages.length; i++) { pages.item(i).style.display="none"; }
var nav = container.querySelectorAll(“.menu-internal");
for (var i = 0; i < nav.length; i++) { nav[i].onclick=displayPage; } };
function displayPage() {
for (var i = 0 ; i < pages.length; i ++) { pages[i].style.display="none"; }
var id = this.querySelector(".menu-internal").getAttribute('href');
document.querySelector(id).style.display = 'block';
}
Пример – jQuery
$(document).ready(function() { // when DOM ready
$('#tabs > div').hide(); // hide all child divs
$('#tabs div:nth-child(2)').show(); // show second child dive
$('#tabsnav li:nth-child(2)').addClass('active');
$('.menu-internal').click(function(){
$('#tabsnav li').removeClass('active');
var currentTab = $(this).attr('href');
$('#tabsnav li a[href="'+currentTab+'"]').parent().addClass('active');
$('#tabs > div').hide(); $(currentTab).show();
});
});
Пример – jQuery UI
$( "#tabs" ).tabs();
Пример
$( "#tabs" ).tabs();
var pages;
window.onload=function() {
var container = document.querySelector("#tabs");
var navitem = document.querySelector("#tab-2");
navitem.parentNode.setAttribute("class", "active");
pages = container.querySelectorAll(".tab");
for (var i = 0; i < pages.length; i++) {
pages.item(i).style.display="none";
}
var nav = container.querySelectorAll(“.menu-internal");
for (var i = 0; i < nav.length; i++) {
nav[i].onclick=displayPage;
}
};
function displayPage() {
for (var i = 0 ; i < pages.length; i ++) {
pages[i].style.display="none";
}
var id = this.querySelector(".menu-internal").getAttribute('href');
document.querySelector(id).style.display = 'block';
}
Атоматизация
• main.coffee
• components/
– tabs/
• directive.coffee
• controller.coffee
• template.jade
• styles.styl
• test.coffee
– dropdown/
• directive.coffee
• controller.coffee
• template.jade
• styles.styl
• test.coffee
– checkbox/
• …
• …
• build/
• app.min.js
• styles.min.css
• assets/
• …
• Unit tests
• Clean last build
• Compile .jade
• Compile .coffee
• Compile .styl
• Concat
• Compress
• …
{
Task manager
Статистика скачивания
Они очень похожи
Grunt
• cmd: npm install –g grunt-cli
• package.json, gruntfile.js
• cmd: grunt task:target
Gulp
• cmd: npm install –g gulp
• package.json, gulpfile.js
• cmd: gulp task
И сразу пример
И сразу пример
• src/
• css/
• base.css
• index.css
• js/
• app.js
• base.js
• controller.js
• helpers.js
• model.js
• store.js
• template.js
• view.js
• index.html
• build/
• css.css
• js.js
• index.html
package.json
Grunt
{
"name": "my-project-name",
"version": "0.1.0",
"devDependencies": {
"grunt": "~0.4.5",
"grunt-contrib-concat": "~0.5.1",
"grunt-contrib-copy": "~0.8.0"
}
}
Gulp
{
"name": "my-project-name",
"version": "0.1.0",
"devDependencies": {
"gulp": "~3.8.11",
"gulp-concat": "~2.5.2"
}
}
Gruntfile.js module.exports = function(grunt) {
grunt.loadNpmTasks(“grunt-contrib-copy”);
grunt.loadNpmTasks(“grunt-contrib-concat”);
grunt.initConfig(
{
“copy”: {
main: {
files: [{
expand: true, cwd: “src/”,
src: [ “index.html” ], dest: “./build”
}]
}
},
“concat”: {
js: {
src: [
“./src/js/base.js", "./src/js/helpers.js”,
“./src/js/store.js", "./src/js/model.js”,
“./src/js/template.js", "./src/js/view.js”,
“./src/js/controller.js", "./src/js/app.js”
],
dest: “./build/js.js”
},
css: {
src: [ “./src/css/*.css” ],
dest: “./build/css.css”
}
}
}
);
grunt.registerTask(“default”, [ “copy”, “concat:js”, “concat:css” ]);
};
Gulpfile.js
var gulp = require(“gulp”);
var concat = require(“gulp-concat”);
gulp.task(“default”, function() {
gulp.src(“src/index.html”)
.pipe(gulp.dest(“build”));
gulp.src([
“./src/js/base.js”, “./src/js/helpers.js”,
“./src/js/store.js”, “./src/js/model.js”,
“./src/js/template.js”, “./src/js/view.js”,
“./src/js/controller.js”, “./src/js/app.js” ])
.pipe(concat(“js.js”))
.pipe(gulp.dest(“build”));
gulp.src([“./src/css/*.css”])
.pipe(concat(“css.css”))
.pipe(gulp.dest(“build”))
});
Запуск
Grunt
cmd: grunt
Gulp
cmd: gulp
> grunt
Running "copy:main" (copy) task
Copied 1 file
Running "concat:js" (concat) task
File ./build/js.js created.
Running "concat:css" (concat) task
File ./build/css.css created.
Done, without errors.
> gulp
[12:52:53] Using gulpfile pathgulpfile.js
[12:52:53] Starting 'default'...
[12:52:53] Finished 'default' after 13 ms
Вместо заключения
Вместо заключения
МАШИНЫ ДОЛЖНЫ
СТРАДАТЬ
Вместо заключения
Пока мы строим ВЕБ
Спасибо

More Related Content

What's hot

Javascript4
Javascript4Javascript4
Javascript4mozks
 
Jquery Preparation
Jquery PreparationJquery Preparation
Jquery Preparationumesh patil
 
WordPress Customizer
WordPress CustomizerWordPress Customizer
WordPress Customizerslicejack
 
Working With Ajax Frameworks
Working With Ajax FrameworksWorking With Ajax Frameworks
Working With Ajax FrameworksJonathan Snook
 
лабораторная работа 1
лабораторная работа 1лабораторная работа 1
лабораторная работа 1sheplyakov
 
JS for Rails developers
JS for Rails developersJS for Rails developers
JS for Rails developersTimur Vafin
 
Bookmarklets and you!
Bookmarklets and you!Bookmarklets and you!
Bookmarklets and you!Adam Heim
 
Tworzenie wtyczek dla TinyMCE 4.* - WordUp Kraków
Tworzenie wtyczek dla TinyMCE 4.* - WordUp KrakówTworzenie wtyczek dla TinyMCE 4.* - WordUp Kraków
Tworzenie wtyczek dla TinyMCE 4.* - WordUp KrakówTomasz Dziuda
 
10 Programación Web con .NET y C#
10 Programación Web con .NET y C#10 Programación Web con .NET y C#
10 Programación Web con .NET y C#guidotic
 
HTML5を使ったウェブアプリケーションの高速化
HTML5を使ったウェブアプリケーションの高速化HTML5を使ったウェブアプリケーションの高速化
HTML5を使ったウェブアプリケーションの高速化hagino 3000
 
Intro to jQuery UI
Intro to jQuery UIIntro to jQuery UI
Intro to jQuery UIappendTo
 
Node.js and Web.js
Node.js and Web.jsNode.js and Web.js
Node.js and Web.jsWill Gunn
 
Testing in JavaScript
Testing in JavaScriptTesting in JavaScript
Testing in JavaScriptMarian Rusnak
 
jQueryのその先へ〜Webフロントエンドの全体感をつかもう〜
jQueryのその先へ〜Webフロントエンドの全体感をつかもう〜jQueryのその先へ〜Webフロントエンドの全体感をつかもう〜
jQueryのその先へ〜Webフロントエンドの全体感をつかもう〜Kazuyoshi Tsuchiya
 

What's hot (20)

Javascript4
Javascript4Javascript4
Javascript4
 
Jquery ui, ajax
Jquery ui, ajaxJquery ui, ajax
Jquery ui, ajax
 
Jquery Preparation
Jquery PreparationJquery Preparation
Jquery Preparation
 
Wek14 mysql 2
Wek14 mysql 2Wek14 mysql 2
Wek14 mysql 2
 
WordPress Customizer
WordPress CustomizerWordPress Customizer
WordPress Customizer
 
Working With Ajax Frameworks
Working With Ajax FrameworksWorking With Ajax Frameworks
Working With Ajax Frameworks
 
лабораторная работа 1
лабораторная работа 1лабораторная работа 1
лабораторная работа 1
 
JS for Rails developers
JS for Rails developersJS for Rails developers
JS for Rails developers
 
Framsia schmamsia
Framsia schmamsiaFramsia schmamsia
Framsia schmamsia
 
Bookmarklets and you!
Bookmarklets and you!Bookmarklets and you!
Bookmarklets and you!
 
Tworzenie wtyczek dla TinyMCE 4.* - WordUp Kraków
Tworzenie wtyczek dla TinyMCE 4.* - WordUp KrakówTworzenie wtyczek dla TinyMCE 4.* - WordUp Kraków
Tworzenie wtyczek dla TinyMCE 4.* - WordUp Kraków
 
Jquery Framework
Jquery FrameworkJquery Framework
Jquery Framework
 
10 Programación Web con .NET y C#
10 Programación Web con .NET y C#10 Programación Web con .NET y C#
10 Programación Web con .NET y C#
 
HTML5を使ったウェブアプリケーションの高速化
HTML5を使ったウェブアプリケーションの高速化HTML5を使ったウェブアプリケーションの高速化
HTML5を使ったウェブアプリケーションの高速化
 
Intro to jQuery UI
Intro to jQuery UIIntro to jQuery UI
Intro to jQuery UI
 
Node.js and Web.js
Node.js and Web.jsNode.js and Web.js
Node.js and Web.js
 
Testing in JavaScript
Testing in JavaScriptTesting in JavaScript
Testing in JavaScript
 
Introducción a Bolt
Introducción a BoltIntroducción a Bolt
Introducción a Bolt
 
Classic Widget
Classic WidgetClassic Widget
Classic Widget
 
jQueryのその先へ〜Webフロントエンドの全体感をつかもう〜
jQueryのその先へ〜Webフロントエンドの全体感をつかもう〜jQueryのその先へ〜Webフロントエンドの全体感をつかもう〜
jQueryのその先へ〜Webフロントエンドの全体感をつかもう〜
 

Viewers also liked

Want to be a QA? What's next?
Want to be a QA? What's next?Want to be a QA? What's next?
Want to be a QA? What's next?DataArt
 
"Up-Down Development & DSL-first approach", Владимир Мельник, DataArt
 "Up-Down Development & DSL-first approach", Владимир Мельник, DataArt "Up-Down Development & DSL-first approach", Владимир Мельник, DataArt
"Up-Down Development & DSL-first approach", Владимир Мельник, DataArtDataArt
 
76363027 bo-cau-hoi-sinh-dai-cuong 2
76363027 bo-cau-hoi-sinh-dai-cuong 276363027 bo-cau-hoi-sinh-dai-cuong 2
76363027 bo-cau-hoi-sinh-dai-cuong 2doanh2801
 
Application form
Application formApplication form
Application formsksknba5015
 
Hong Kong
Hong KongHong Kong
Hong KongDataArt
 
Миша Постольный «Контрформа». Харьков.
Миша Постольный «Контрформа». Харьков. Миша Постольный «Контрформа». Харьков.
Миша Постольный «Контрформа». Харьков. DataArt
 
Ярослав Воронцов - Security
Ярослав Воронцов - SecurityЯрослав Воронцов - Security
Ярослав Воронцов - SecurityDataArt
 
Лилия Зданевич "Automation testing save time and money"
Лилия Зданевич "Automation testing save time and money"Лилия Зданевич "Automation testing save time and money"
Лилия Зданевич "Automation testing save time and money"DataArt
 
IR
IRIR
IRMAK
 
«Как разработать надежное решение».Владимир Мельник, Ruby Developer, DataArt
«Как разработать надежное решение».Владимир Мельник, Ruby Developer, DataArt«Как разработать надежное решение».Владимир Мельник, Ruby Developer, DataArt
«Как разработать надежное решение».Владимир Мельник, Ruby Developer, DataArtDataArt
 
Thriller advertisement posters
Thriller advertisement postersThriller advertisement posters
Thriller advertisement postersAbbey Cotterill
 
8 Things Business Owners Wish They Knew
8 Things Business Owners Wish They Knew8 Things Business Owners Wish They Knew
8 Things Business Owners Wish They KnewUrbanBound
 
Дмтрий Андрусенко (DataArt) "Мир IT вчера, сегодня и завтра"
Дмтрий Андрусенко (DataArt) "Мир IT вчера, сегодня и завтра"Дмтрий Андрусенко (DataArt) "Мир IT вчера, сегодня и завтра"
Дмтрий Андрусенко (DataArt) "Мир IT вчера, сегодня и завтра"DataArt
 
Андраш Густи «Интерфейсы, которые вызывают привыкание, или Как перепрошить по...
Андраш Густи «Интерфейсы, которые вызывают привыкание, или Как перепрошить по...Андраш Густи «Интерфейсы, которые вызывают привыкание, или Как перепрошить по...
Андраш Густи «Интерфейсы, которые вызывают привыкание, или Как перепрошить по...DataArt
 

Viewers also liked (20)

Want to be a QA? What's next?
Want to be a QA? What's next?Want to be a QA? What's next?
Want to be a QA? What's next?
 
"Up-Down Development & DSL-first approach", Владимир Мельник, DataArt
 "Up-Down Development & DSL-first approach", Владимир Мельник, DataArt "Up-Down Development & DSL-first approach", Владимир Мельник, DataArt
"Up-Down Development & DSL-first approach", Владимир Мельник, DataArt
 
Mapas etiquetas
Mapas etiquetasMapas etiquetas
Mapas etiquetas
 
Riley slides (2)
Riley slides (2)Riley slides (2)
Riley slides (2)
 
76363027 bo-cau-hoi-sinh-dai-cuong 2
76363027 bo-cau-hoi-sinh-dai-cuong 276363027 bo-cau-hoi-sinh-dai-cuong 2
76363027 bo-cau-hoi-sinh-dai-cuong 2
 
Movie distributors
Movie distributorsMovie distributors
Movie distributors
 
Sam mendes
Sam mendesSam mendes
Sam mendes
 
Application form
Application formApplication form
Application form
 
Hong Kong
Hong KongHong Kong
Hong Kong
 
Media: Ancillary photos
Media: Ancillary photosMedia: Ancillary photos
Media: Ancillary photos
 
Миша Постольный «Контрформа». Харьков.
Миша Постольный «Контрформа». Харьков. Миша Постольный «Контрформа». Харьков.
Миша Постольный «Контрформа». Харьков.
 
Ярослав Воронцов - Security
Ярослав Воронцов - SecurityЯрослав Воронцов - Security
Ярослав Воронцов - Security
 
Лилия Зданевич "Automation testing save time and money"
Лилия Зданевич "Automation testing save time and money"Лилия Зданевич "Automation testing save time and money"
Лилия Зданевич "Automation testing save time and money"
 
IR
IRIR
IR
 
«Как разработать надежное решение».Владимир Мельник, Ruby Developer, DataArt
«Как разработать надежное решение».Владимир Мельник, Ruby Developer, DataArt«Как разработать надежное решение».Владимир Мельник, Ruby Developer, DataArt
«Как разработать надежное решение».Владимир Мельник, Ruby Developer, DataArt
 
Thriller advertisement posters
Thriller advertisement postersThriller advertisement posters
Thriller advertisement posters
 
8 Things Business Owners Wish They Knew
8 Things Business Owners Wish They Knew8 Things Business Owners Wish They Knew
8 Things Business Owners Wish They Knew
 
E-Guardian Plus Kit Brochure
E-Guardian Plus Kit BrochureE-Guardian Plus Kit Brochure
E-Guardian Plus Kit Brochure
 
Дмтрий Андрусенко (DataArt) "Мир IT вчера, сегодня и завтра"
Дмтрий Андрусенко (DataArt) "Мир IT вчера, сегодня и завтра"Дмтрий Андрусенко (DataArt) "Мир IT вчера, сегодня и завтра"
Дмтрий Андрусенко (DataArt) "Мир IT вчера, сегодня и завтра"
 
Андраш Густи «Интерфейсы, которые вызывают привыкание, или Как перепрошить по...
Андраш Густи «Интерфейсы, которые вызывают привыкание, или Как перепрошить по...Андраш Густи «Интерфейсы, которые вызывают привыкание, или Как перепрошить по...
Андраш Густи «Интерфейсы, которые вызывают привыкание, или Как перепрошить по...
 

More from DataArt

DataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human ApproachDataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human ApproachDataArt
 
DataArt Healthcare & Life Sciences
DataArt Healthcare & Life SciencesDataArt Healthcare & Life Sciences
DataArt Healthcare & Life SciencesDataArt
 
DataArt Financial Services and Capital Markets
DataArt Financial Services and Capital MarketsDataArt Financial Services and Capital Markets
DataArt Financial Services and Capital MarketsDataArt
 
About DataArt HR Partners
About DataArt HR PartnersAbout DataArt HR Partners
About DataArt HR PartnersDataArt
 
Event management в IT
Event management в ITEvent management в IT
Event management в ITDataArt
 
Digital Marketing from inside
Digital Marketing from insideDigital Marketing from inside
Digital Marketing from insideDataArt
 
What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)DataArt
 
DevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проектDevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проектDataArt
 
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArtIT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArtDataArt
 
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
 «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han... «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...DataArt
 
Communication in QA's life
Communication in QA's lifeCommunication in QA's life
Communication in QA's lifeDataArt
 
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьмиНельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьмиDataArt
 
Знакомьтесь, DevOps
Знакомьтесь, DevOpsЗнакомьтесь, DevOps
Знакомьтесь, DevOpsDataArt
 
DevOps in real life
DevOps in real lifeDevOps in real life
DevOps in real lifeDataArt
 
Codeless: автоматизация тестирования
Codeless: автоматизация тестированияCodeless: автоматизация тестирования
Codeless: автоматизация тестированияDataArt
 
Selenoid
SelenoidSelenoid
SelenoidDataArt
 
Selenide
SelenideSelenide
SelenideDataArt
 
A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"DataArt
 
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...DataArt
 
IT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNGIT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNGDataArt
 

More from DataArt (20)

DataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human ApproachDataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human Approach
 
DataArt Healthcare & Life Sciences
DataArt Healthcare & Life SciencesDataArt Healthcare & Life Sciences
DataArt Healthcare & Life Sciences
 
DataArt Financial Services and Capital Markets
DataArt Financial Services and Capital MarketsDataArt Financial Services and Capital Markets
DataArt Financial Services and Capital Markets
 
About DataArt HR Partners
About DataArt HR PartnersAbout DataArt HR Partners
About DataArt HR Partners
 
Event management в IT
Event management в ITEvent management в IT
Event management в IT
 
Digital Marketing from inside
Digital Marketing from insideDigital Marketing from inside
Digital Marketing from inside
 
What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)
 
DevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проектDevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проект
 
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArtIT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
 
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
 «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han... «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
 
Communication in QA's life
Communication in QA's lifeCommunication in QA's life
Communication in QA's life
 
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьмиНельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
 
Знакомьтесь, DevOps
Знакомьтесь, DevOpsЗнакомьтесь, DevOps
Знакомьтесь, DevOps
 
DevOps in real life
DevOps in real lifeDevOps in real life
DevOps in real life
 
Codeless: автоматизация тестирования
Codeless: автоматизация тестированияCodeless: автоматизация тестирования
Codeless: автоматизация тестирования
 
Selenoid
SelenoidSelenoid
Selenoid
 
Selenide
SelenideSelenide
Selenide
 
A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"
 
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
 
IT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNGIT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNG
 

Александр Кашеверов «Пара слов о веб - приложениях и что такое Gulp»

  • 1. Спикер: Тема презентации: Кашеверов Александр Пара слов о веб – приложениях и что такое Gulp
  • 3. О чём расскажу Front-end Немного истории Пример Gulp vs Grunt
  • 7. Схема №2 С этого момента поподробнее
  • 11.
  • 12. Много умных слов HTML CSS JavaScript jQuery CSS3 HTML5 ajax Backbone IEsvg Angular Twitter Bootstrap WebStorage D3.js prototype mootools sencha Responsive layout WebWorker Cookies Gulp Grunt Coffeescript JSON HTTP flash Canvas Polymer ReactJS
  • 14. Всё было бы не так интересно без Javascript • 1995 – Брендан Айк из Netscape (Firefox) внедрил ЯП в браузер. Цель - изменение структуры без перезагрузки страницы • 1996 – Jscript. Microsoft выпустила аналог языка JavaScript. • 2005 – ajax, prototype.js, jQuery, Mootools, Dojo • 2008 – JavaScript MVC • 2009 – NodeJS • evolutionoftheweb.com – история развития • Сейчас WEB без JS невозможен
  • 15. “hello world” на JavaScript 1. <script type="text/javascript"> alert("Hello world"); </script> 2. <a href="/page" onclick="alert('Hello world');">a link</a> 3. <script type="text/javascript" src=“/path/file.js"></script>
  • 17. Пример <div id="tabs"> <ul class="tabs" id="tabsnav"> <li><a href="#tab-1" class="menu-internal">Tab One</a></li> <li><a href="#tab-2" class="menu-internal">Tab Two</a></li> <li><a href="#tab-3" class="menu-internal">Tab Three</a></li> <li><a href="#tab-4" class="menu-internal">Tab Four</a></li> </ul> <div id="tab-1“ class="tab"> <p>Tab1 Content</p> </div> <div id="tab-2“ class="tab"> <h2>Tab 2</h2> <p>Tab 2 content</p> </div> <div id="tab-3“ class="tab"> <p>Tab 3 content</p> </div> <div id="tab-4“ class="tab"> <p>Tab 4 content.</p> </div> </div>
  • 18. Пример – чистый javascript var pages; window.onload=function() { var container = document.querySelector("#tabs"); var navitem = document.querySelector("#tab-2"); navitem.parentNode.setAttribute("class", "active"); pages = container.querySelectorAll(".tab"); for (var i = 0; i < pages.length; i++) { pages.item(i).style.display="none"; } var nav = container.querySelectorAll(“.menu-internal"); for (var i = 0; i < nav.length; i++) { nav[i].onclick=displayPage; } }; function displayPage() { for (var i = 0 ; i < pages.length; i ++) { pages[i].style.display="none"; } var id = this.querySelector(".menu-internal").getAttribute('href'); document.querySelector(id).style.display = 'block'; }
  • 19. Пример – jQuery $(document).ready(function() { // when DOM ready $('#tabs > div').hide(); // hide all child divs $('#tabs div:nth-child(2)').show(); // show second child dive $('#tabsnav li:nth-child(2)').addClass('active'); $('.menu-internal').click(function(){ $('#tabsnav li').removeClass('active'); var currentTab = $(this).attr('href'); $('#tabsnav li a[href="'+currentTab+'"]').parent().addClass('active'); $('#tabs > div').hide(); $(currentTab).show(); }); });
  • 20. Пример – jQuery UI $( "#tabs" ).tabs();
  • 21. Пример $( "#tabs" ).tabs(); var pages; window.onload=function() { var container = document.querySelector("#tabs"); var navitem = document.querySelector("#tab-2"); navitem.parentNode.setAttribute("class", "active"); pages = container.querySelectorAll(".tab"); for (var i = 0; i < pages.length; i++) { pages.item(i).style.display="none"; } var nav = container.querySelectorAll(“.menu-internal"); for (var i = 0; i < nav.length; i++) { nav[i].onclick=displayPage; } }; function displayPage() { for (var i = 0 ; i < pages.length; i ++) { pages[i].style.display="none"; } var id = this.querySelector(".menu-internal").getAttribute('href'); document.querySelector(id).style.display = 'block'; }
  • 22. Атоматизация • main.coffee • components/ – tabs/ • directive.coffee • controller.coffee • template.jade • styles.styl • test.coffee – dropdown/ • directive.coffee • controller.coffee • template.jade • styles.styl • test.coffee – checkbox/ • … • … • build/ • app.min.js • styles.min.css • assets/ • … • Unit tests • Clean last build • Compile .jade • Compile .coffee • Compile .styl • Concat • Compress • … { Task manager
  • 23.
  • 25. Они очень похожи Grunt • cmd: npm install –g grunt-cli • package.json, gruntfile.js • cmd: grunt task:target Gulp • cmd: npm install –g gulp • package.json, gulpfile.js • cmd: gulp task
  • 27. И сразу пример • src/ • css/ • base.css • index.css • js/ • app.js • base.js • controller.js • helpers.js • model.js • store.js • template.js • view.js • index.html • build/ • css.css • js.js • index.html
  • 28. package.json Grunt { "name": "my-project-name", "version": "0.1.0", "devDependencies": { "grunt": "~0.4.5", "grunt-contrib-concat": "~0.5.1", "grunt-contrib-copy": "~0.8.0" } } Gulp { "name": "my-project-name", "version": "0.1.0", "devDependencies": { "gulp": "~3.8.11", "gulp-concat": "~2.5.2" } }
  • 29. Gruntfile.js module.exports = function(grunt) { grunt.loadNpmTasks(“grunt-contrib-copy”); grunt.loadNpmTasks(“grunt-contrib-concat”); grunt.initConfig( { “copy”: { main: { files: [{ expand: true, cwd: “src/”, src: [ “index.html” ], dest: “./build” }] } }, “concat”: { js: { src: [ “./src/js/base.js", "./src/js/helpers.js”, “./src/js/store.js", "./src/js/model.js”, “./src/js/template.js", "./src/js/view.js”, “./src/js/controller.js", "./src/js/app.js” ], dest: “./build/js.js” }, css: { src: [ “./src/css/*.css” ], dest: “./build/css.css” } } } ); grunt.registerTask(“default”, [ “copy”, “concat:js”, “concat:css” ]); };
  • 30. Gulpfile.js var gulp = require(“gulp”); var concat = require(“gulp-concat”); gulp.task(“default”, function() { gulp.src(“src/index.html”) .pipe(gulp.dest(“build”)); gulp.src([ “./src/js/base.js”, “./src/js/helpers.js”, “./src/js/store.js”, “./src/js/model.js”, “./src/js/template.js”, “./src/js/view.js”, “./src/js/controller.js”, “./src/js/app.js” ]) .pipe(concat(“js.js”)) .pipe(gulp.dest(“build”)); gulp.src([“./src/css/*.css”]) .pipe(concat(“css.css”)) .pipe(gulp.dest(“build”)) });
  • 31. Запуск Grunt cmd: grunt Gulp cmd: gulp > grunt Running "copy:main" (copy) task Copied 1 file Running "concat:js" (concat) task File ./build/js.js created. Running "concat:css" (concat) task File ./build/css.css created. Done, without errors. > gulp [12:52:53] Using gulpfile pathgulpfile.js [12:52:53] Starting 'default'... [12:52:53] Finished 'default' after 13 ms