Automatização Desenvolvimento Web com Gulp

39
Automatização no desenvolvimento Web com Gulp Ricardo Costa http://netpont o.org 59ª Reunião Presencial - 23/01/2016

Transcript of Automatização Desenvolvimento Web com Gulp

Page 1: Automatização Desenvolvimento Web com Gulp

Automatização no desenvolvimento Web

com GulpRicardo Costa

http://netponto.org59ª Reunião Presencial - 23/01/2016

Page 2: Automatização Desenvolvimento Web com Gulp

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.

Page 3: Automatização Desenvolvimento Web com Gulp

Agenda• gulp()• conceitosBase()• gerir(frameworks)• optimizar(imagens)• injectar(referencias)• deploy(dev)• watch()

• sincronizar(browsers.All)• uglify()• minify()• deploy(prod)• integrar(visualStudio[2015])

Page 4: Automatização Desenvolvimento Web com Gulp

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.

Page 5: Automatização Desenvolvimento Web com Gulp

conceitosBase()• 4 funções base– src– dest– task– watch

• Streams• Pipe

Page 6: Automatização Desenvolvimento Web com Gulp

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'));});

Page 7: Automatização Desenvolvimento Web com Gulp

conceitos base

demonstração

Page 8: Automatização Desenvolvimento Web com Gulp

ambienteweb 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\

Page 9: Automatização Desenvolvimento Web com Gulp

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

Page 10: Automatização Desenvolvimento Web com Gulp

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')); });

Page 11: Automatização Desenvolvimento Web com Gulp

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'));

});

Page 12: Automatização Desenvolvimento Web com Gulp

bower.io

demonstração

Page 13: Automatização Desenvolvimento Web com Gulp

optimizar(imagens)• Plugin específico para optimização de imagens• https://www.npmjs.com/package/gulp-imagemin• Diminui o tamanho dos ficheiros de imagens

Page 14: Automatização Desenvolvimento Web com Gulp

optimizar(imagens)

gulp.task('images', function () {

return gulp.src('app/img/*').pipe(imagemin()) .pipe(gulp.dest(config.dest + 'img'));

});

Page 15: Automatização Desenvolvimento Web com Gulp

imagemin

demonstração

Page 16: Automatização Desenvolvimento Web com Gulp

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>

Page 17: Automatização Desenvolvimento Web com Gulp

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));});

Page 18: Automatização Desenvolvimento Web com Gulp

inject

demonstração

Page 19: Automatização Desenvolvimento Web com Gulp

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\

Page 20: Automatização Desenvolvimento Web com Gulp

deploy(dev)

gulp.task('deploy', sequence(['styles', 'scripts', 'images'], 'html'));

Page 21: Automatização Desenvolvimento Web com Gulp

deploy

demonstração

Page 22: Automatização Desenvolvimento Web com Gulp

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

Page 23: Automatização Desenvolvimento Web com Gulp

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'));

Page 24: Automatização Desenvolvimento Web com Gulp

browser sync

demonstração

Page 25: Automatização Desenvolvimento Web com Gulp

uglify() + minify()

• Utilização para scripts e estilos• https://www.npmjs.com/package/gulp-uglifyjs• https://www.npmjs.com/package/gulp-cssnano

Page 26: Automatização Desenvolvimento Web com Gulp

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'));

});

Page 27: Automatização Desenvolvimento Web com Gulp

uglify & minify

demonstração

Page 28: Automatização Desenvolvimento Web com Gulp

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\

Page 29: Automatização Desenvolvimento Web com Gulp

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'));

Page 30: Automatização Desenvolvimento Web com Gulp

deploy

demonstração

Page 31: Automatização Desenvolvimento Web com Gulp

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

Page 32: Automatização Desenvolvimento Web com Gulp

Dúvidas?

Page 33: Automatização Desenvolvimento Web com Gulp

ReferênciasSite Gulp

– http://gulpjs.com/

Site Node Package Manager– https://www.npmjs.com/

Site bower.io– http://bower.io/

Page 34: Automatização Desenvolvimento Web com Gulp

Patrocinadores “GOLD”

Twitter: @PTMicrosoft http://www.microsoft.com/portugal

Page 35: Automatização Desenvolvimento Web com Gulp

Patrocinadores “Silver”

Page 36: Automatização Desenvolvimento Web com Gulp

Patrocinadores “Bronze”

Page 37: Automatização Desenvolvimento Web com Gulp

http://bit.ly/netponto-aval-59

* Para quem não puder preencher durante a reunião, iremos enviar um email com o link à tarde

Page 38: Automatização Desenvolvimento Web com Gulp

Próximas reuniões presenciais23/01/2016 – Lisboa20/02/2016 – Braga27/02/2016 – Lisboa19/03/2016 – Lisboa26/03/2016 – PortoReserva estes dias na agenda! :)

Page 39: Automatização Desenvolvimento Web com Gulp

Obrigado!

Ricardo Costahttps://www.linkedin.com/in/kostahttp://blogit.create.pt/[email protected]