SlideShare ist ein Scribd-Unternehmen logo
1 von 39
Automatização
no desenvolvimento Web
com Gulp
Ricardo Costa
http://netponto.org59ª Reunião Presencial - 23/01/2016
Ricardo Costa
• Licenciado em Engª Electrotécnica e
Computadores na Faculdade de Ciências e
Tecnologia na UNL.
• Actualmente consultor sénior na |create|it| ,
uma empresa focada na área de soluções
colaborativas e integração de sistemas.
• Participação e implementação de diversas
soluções desde a análise e concepção,
passando também pela arquitectura.
• Preferência pelas áreas de SOA e integração.
Agenda
• gulp()
• conceitosBase()
• gerir(frameworks)
• optimizar(imagens)
• injectar(referencias)
• deploy(dev)
• watch()
• sincronizar(browsers.All)
• uglify()
• minify()
• deploy(prod)
• integrar(visualStudio[2015])
Gulp
• Gulp é um “task runner” baseado em node.js.
• Tem um ecossistema enorme de plugins.
• Facilita tarefas recorrentes do desenvolvimento.
• Permite a criação de workflows complexos.
conceitosBase()
• 4 funções base
– src
– dest
– task
– watch
• Streams
• Pipe
conceitosBase()
var gulp = require('gulp');
gulp.task('copy', function () {
return gulp.src('./source/*.txt')
.pipe(gulp.dest('./target'));
});
var sass = require('gulp-sass');
gulp.task('styles', function () {
return gulp.src('./source/*.scss')
.pipe(sass.sync().on('error', sass.logError))
.pipe(gulp.dest('./target'));
});
var typescript
= require('gulp-typescript');
gulp.task('scripts', function () {
return gulp.src('./source/*.ts')
.pipe(typescript())
.pipe(gulp.dest('./target'));
});
conceitos base
ambiente
web site
• app
• css
• js
• images
• bower_components
• index.html
• dist
• webapi
web site
• app
• css
• js
• images
• bower_components
• index.html
• dist
• css
• js
• images
• index.html
• webapi
gerir(frameworks)
• bower.io
– Facilita a gestão de frameworks (jquery, bootstrap, fa,
angular, entre outras)
• Plugin específico para obter os ficheiros que
constituem cada uma das frameworks
• https://www.npmjs.com/package/main-bower-
files
gerir(frameworks)
var vendorScripts = function () {
return gulp.src('./bower.json')
.pipe(bowerFiles(config.mainBowerFilesOverride))
.pipe(filter('**/*.js'))
.pipe(flatten());
};
var appScripts = function () {
return gulp.src('./app/js/*.js');
};
gulp.task('scripts', function () {
return merge(vendorScripts(), appScripts())
.pipe(gulp.dest(config.dest + 'js'));
});
gerir(frameworks)
var styles = function () {
return gulp.src('./bower.json')
.pipe(bowerFiles(config.mainBowerFilesOverride))
.pipe(filter(['**/*.css', '!**/*.min.css']))
.pipe(addsrc('./app/css/*.css'))
.pipe(flatten());
};
gulp.task('styles', function () {
return styles()
.pipe(gulp.dest(config.dest + 'css'));
});
bower.io
optimizar(imagens)
• Plugin específico para optimização de imagens
• https://www.npmjs.com/package/gulp-imagemin
• Diminui o tamanho dos ficheiros de imagens
optimizar(imagens)
gulp.task('images', function () {
return gulp.src('app/img/*')
.pipe(imagemin())
.pipe(gulp.dest(config.dest + 'img'));
});
imagemin
injectar(referencias)
• Plugin para adicionar dinamicamente em ficheiros
html as referências para estilos e scripts
• https://www.npmjs.com/package/gulp-inject
• Facilita a definição fo HTML e das tags
– <link rel="stylesheet" href="/src/style1.css">
– <script src="/src/lib1.js"></script>
injectar(referencias)
gulp.task('html', function () {
var target = gulp.src('app/index.html');
var sources = gulp.src([config.dest + 'css/*',
config.dest + 'js/*']);
return target.pipe(inject(sources, { ignorePath: 'dist/', addRootSlash: false }))
.pipe(gulp.dest(config.dest));
});
inject
deploy(dev)
web site
• app
• css
• js
• images
• bower_components
• index.html
• dist
• webapi
web site
• app
• css
• js
• images
• bower_components
• index.html
• dist
• css
• js
• images
• index.html
• webapi
deploy(dev)
gulp.task('deploy', sequence(['styles', 'scripts', 'images'], 'html'));
deploy
watch()
sincronizar(browsers.All)
• Detectar alterações e correr tarefas
automaticamente
• Browser Sync para simplificar testes com vários
browsers
• https://www.npmjs.com/package/browser-sync
watch()
sincronizar(browsers.All)
gulp.task('sync', function () {
browserSync.init({
proxy: "localhost/Netponto/dist/"
});
});
gulp.task('watch', function () {
gulp.watch('./app/css/*.css', ['styles'])
.on('change', browserSync.reload);;
})
gulp.task('deploy', sequence(['styles', 'scripts', 'images'], 'html',
'sync', 'watch'));
browser sync
uglify() + minify()
• Utilização para scripts e estilos
• https://www.npmjs.com/package/gulp-uglifyjs
• https://www.npmjs.com/package/gulp-cssnano
uglify() + minify()
gulp.task('prodScripts', function () {
return merge(vendorScripts(), appScripts())
.pipe(order(['jquery.js', 'angular.js', 'bootstrap.js',
'controllers.js']))
.pipe(sourcemaps.init())
.pipe(concat('app.js'))
.pipe(uglify())
.pipe(sourcemaps.write('maps'))
.pipe(gulp.dest(config.dest + 'js'));
});
gulp.task('prodStyles', function () {
return styles()
.pipe(concat('all.css'))
.pipe(sourcemaps.init())
.pipe(cssnano())
.pipe(sourcemaps.write('maps'))
.pipe(gulp.dest(config.dest + 'css'));
});
uglify & minify
deploy(prod)
web site
• app
• css
• js
• images
• bower_components
• index.html
• dist
• webapi
web site
• app
• css
• js
• images
• bower_components
• index.html
• dist
• css
• js
• images
• index.html
• webapi
deploy(prod)
gulp.task('prodWatch', function () {
gulp.watch('./app/css/*.css', ['prodStyles'])
.on('change', browserSync.reload);;
})
gulp.task('deployProd', sequence(['prodStyles', 'prodScripts', 'images'], 'html', 'sync',
'prodWatch'));
deploy
integrar(visualStudio[2015])
– Visual Studio já permite integração com o gulp através
do Task Runer Explorer
– Permita atribuir várias tasks do gulp a vários bindings
que são executados em condições específicas
Dúvidas?
Referências
Site Gulp
– http://gulpjs.com/
Site Node Package Manager
– https://www.npmjs.com/
Site bower.io
– http://bower.io/
Patrocinadores “GOLD”
Twitter: @PTMicrosoft http://www.microsoft.com/portugal
Patrocinadores “Silver”
Patrocinadores “Bronze”
http://bit.ly/netponto-aval-59
* Para quem não puder preencher durante a reunião,
iremos enviar um email com o link à tarde
Próximas reuniões presenciais
23/01/2016 – Lisboa
20/02/2016 – Braga
27/02/2016 – Lisboa
19/03/2016 – Lisboa
26/03/2016 – Porto
Reserva estes dias na agenda! :)
Obrigado!
Ricardo Costa
https://www.linkedin.com/in/kosta
http://blogit.create.pt/ricardocosta
ricardo.costa@create.pt

Weitere ähnliche Inhalte

Ähnlich wie Automatização Web com Gulp

GDG ABC Meetup #5 - Tendências 2015
GDG ABC Meetup #5 - Tendências 2015GDG ABC Meetup #5 - Tendências 2015
GDG ABC Meetup #5 - Tendências 2015Daniel Costa Gimenes
 
Construindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em GoConstruindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em GoAlvaro Viebrantz
 
Flask e Docker - rumo a AWS!
Flask e Docker - rumo a AWS!Flask e Docker - rumo a AWS!
Flask e Docker - rumo a AWS!Ryan Padilha
 
Arquitetura executável: Documentando e automatizando a comunicação da equipe ...
Arquitetura executável: Documentando e automatizando a comunicação da equipe ...Arquitetura executável: Documentando e automatizando a comunicação da equipe ...
Arquitetura executável: Documentando e automatizando a comunicação da equipe ...WeOp - The Operations Summit
 
HUGSP#6 Opus uDSL - Uma DSL para Microserviços
HUGSP#6 Opus uDSL - Uma DSL para MicroserviçosHUGSP#6 Opus uDSL - Uma DSL para Microserviços
HUGSP#6 Opus uDSL - Uma DSL para MicroserviçosPhilippe Sevestre
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoCezinha Anjos
 
O que todos os developers devem saber sobre seo
O que todos os developers devem saber sobre seoO que todos os developers devem saber sobre seo
O que todos os developers devem saber sobre seointrofini
 
Projeto Indiana
Projeto IndianaProjeto Indiana
Projeto Indianahellequin
 
Primeiros passos no Vue.js
Primeiros passos no Vue.jsPrimeiros passos no Vue.js
Primeiros passos no Vue.jsJoel Rodrigues
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosThiago Soares
 
DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...
DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...
DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...Erick Bonnemasou Jaccoud
 
Drupal 8: desenvolvendo fora da ilha
Drupal 8: desenvolvendo fora da ilhaDrupal 8: desenvolvendo fora da ilha
Drupal 8: desenvolvendo fora da ilhaLuiz Filho
 
Cloud Solutions com o Microsoft Azure - TDC Online Especial BH
Cloud Solutions com o Microsoft Azure - TDC Online Especial BHCloud Solutions com o Microsoft Azure - TDC Online Especial BH
Cloud Solutions com o Microsoft Azure - TDC Online Especial BHRenato Groff
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JSRodrigo Urubatan
 

Ähnlich wie Automatização Web com Gulp (20)

Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0
 
GDG ABC Meetup #5 - Tendências 2015
GDG ABC Meetup #5 - Tendências 2015GDG ABC Meetup #5 - Tendências 2015
GDG ABC Meetup #5 - Tendências 2015
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
Quick Form DataBase (QFDB)
Quick Form DataBase (QFDB)Quick Form DataBase (QFDB)
Quick Form DataBase (QFDB)
 
Construindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em GoConstruindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em Go
 
Precisamos falar sobre Gradle
Precisamos falar sobre GradlePrecisamos falar sobre Gradle
Precisamos falar sobre Gradle
 
Flask e Docker - rumo a AWS!
Flask e Docker - rumo a AWS!Flask e Docker - rumo a AWS!
Flask e Docker - rumo a AWS!
 
Arquitetura executável: Documentando e automatizando a comunicação da equipe ...
Arquitetura executável: Documentando e automatizando a comunicação da equipe ...Arquitetura executável: Documentando e automatizando a comunicação da equipe ...
Arquitetura executável: Documentando e automatizando a comunicação da equipe ...
 
HUGSP#6 Opus uDSL - Uma DSL para Microserviços
HUGSP#6 Opus uDSL - Uma DSL para MicroserviçosHUGSP#6 Opus uDSL - Uma DSL para Microserviços
HUGSP#6 Opus uDSL - Uma DSL para Microserviços
 
Introdução Play framework
Introdução Play frameworkIntrodução Play framework
Introdução Play framework
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direito
 
O que todos os developers devem saber sobre seo
O que todos os developers devem saber sobre seoO que todos os developers devem saber sobre seo
O que todos os developers devem saber sobre seo
 
Projeto Indiana
Projeto IndianaProjeto Indiana
Projeto Indiana
 
Primeiros passos no Vue.js
Primeiros passos no Vue.jsPrimeiros passos no Vue.js
Primeiros passos no Vue.js
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãos
 
DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...
DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...
DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...
 
Drupal 8: desenvolvendo fora da ilha
Drupal 8: desenvolvendo fora da ilhaDrupal 8: desenvolvendo fora da ilha
Drupal 8: desenvolvendo fora da ilha
 
Cloud Solutions com o Microsoft Azure - TDC Online Especial BH
Cloud Solutions com o Microsoft Azure - TDC Online Especial BHCloud Solutions com o Microsoft Azure - TDC Online Especial BH
Cloud Solutions com o Microsoft Azure - TDC Online Especial BH
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
 
347842.ppt
347842.ppt347842.ppt
347842.ppt
 

Automatização Web com Gulp

Hinweis der Redaktion

  1. Telerik Ndepend Pluralsight syncfusion
  2. Para quem puder ir preenchendo, assim não chateio mais logo  É importante para recebermos nós feedback, e para darmos feedback aos nossos oradores http://goqr.me/