SlideShare uma empresa Scribd logo
1 de 57
Baixar para ler offline
grunt
esse cara é o
@almirfilho
@davidsonfellipe
@almirfilho
@davidsonfellipe
globo
.com
do workflow
rei
o
front-end
linhadecomando
nodejs
automatizadordetarefas
o grunt não
é o único
ant java
make shell
cake coffeescript
rake ruby
100k
200k
300k
downloads 2013
novoutsetagojuljunmaiabrmarfevjan
400k
dez
100k
200k
300k
downloads 2013-14
novoutsetagojuljunmaiabrmarfevjan
400k
dez
500k
600k
700k
mai
2014
automatizamos?
por que
repetitivo
minimizar trabalho
detalhesmuitos
para lembrar
conversão
frameworks
e libs
compilação
linting
testes
minificação
complexos
útil para projetos
rodar testes
pré-processadores:dev
js/css lint
web server
scaffolding
criar sprites
live reloading
otimizar imagens
concatenação
pré-processadores:prod
minificação e obfuscação
gerar release
deploy
dev
prod
eficiência!
produtividade!
paz de
espírito
grunt
iniciando com
node.js & npm
primeiro as coisas primeiras
grunt-cliinstalação global
instalação local
configuração
configuração
grunt & tools
package.json
Gruntfile.js
$ npm install -g grunt-cli
grunt-cli
instalação global
{
"name": “lusac-noob",
"version": "0.1.0",
"devDependencies": {
"grunt": "~0.4.2",
"grunt-contrib-uglify": "~0.2.2"
}
}
package.json
configuração
$ npm install
grunt & tools
instalação local
--save-dev
$ npm install nome-pacote --save-dev
module.exports = function(grunt){
grunt.initConfig({
uglify: {/* config da tarefa */},
jasmine: {/* config da tarefa */},
compass: {/* config da tarefa */}
});
grunt.loadNpmTasks(‘grunt-contrib-uglify’);
grunt.loadNpmTasks(‘grunt-contrib-jasmine’);
grunt.loadNpmTasks(‘grunt-contrib-compass’);
}
Gruntfile.js
configuração
grunt.initConfig({
uglify: {
options: {
banner: ‘/* dave fulêro */n’
},
build: {
src: ‘src/app.js’,
dest: ‘build/app.min.js’
}
},
jasmine: {/* config da tarefa */},
compass: {/* config da tarefa */}
});
grunt.registerTask(‘build’, [
‘jasmine’,
‘uglify’,
‘compass’
]);
!
grunt.registerTask(‘run’, [
‘build’,
‘connect’
]);
!
grunt.registerTask(‘default’, ['run']);
pop
quem é
concatenação
de arquivos
a.js
e.js
i.js
o.js
u.js
vogais.js
$ npm install grunt-contrib-concat --save-dev
grunt-contrib-concat
o cara que concatena seus arquivos
grunt.initConfig({
concat: {
options: {
separator: ';',
},
dist: {
src: ['src/a.js', 'src/e.js'],
dest: 'build/vogais.js',
}
}
});
concat
no Gruntfile.js
$ grunt concat
concatenação
rodando manualmente
obfuscação e
minificação
de scripts
all.min.j
sall.js
var toSeconds = function(hour) {
!
return hour * 3600;
!
};
var toSeconds = function(a) {
!
return a * 3600;
!
};
var toSeconds=function(a){return a*3600;};
obfuscação
minificação
$ npm install grunt-contrib-uglify --save-dev
grunt-contrib-uglify
o cara que comprime seus arquivos
grunt.initConfig({
uglify: {
build: {
src: 'src/all.js',
dest: 'build/all.min.js'
}
}
});
uglify
no Gruntfile.js
$ grunt uglify
obfuscação e minificação
rodando manualmente
pré-processadores
de código
widget.scss
widget.cs
s
$ npm install grunt-contrib-compass --save-dev
grunt-contrib-compass
o cara que compila seu sass
grunt.initConfig({
compass: {
dev: {
options: {
sassDir: 'src/scss',
cssDir: 'build/css',
imagesDir: 'src/img',
generatedImagesDir: 'build/img'
}
},
prod: { /* ... */ }
}});
compass
no Gruntfile.js
grunt.initConfig({
compass: {
dev: { /* ... */ },
prod: {
options: {
sassDir: 'src/scss',
cssDir: 'build/css',
imagesDir: 'src/img',
generatedImagesDir: 'build/img',
outputStyle: 'compressed',
noLineComments: true
}}}});
compass
no Gruntfile.js
$ grunt compass:dev
compilação de sass
$ grunt compass:prod
rodando manualmente
pré-processadores
grunt-contrib-sasssass
stylus
less
coffeescript
grunt-contrib-stylus
grunt-contrib-less
grunt-contrib-coffee
testes
automatizados
specs
sucess
o
erro
$ npm install grunt-contrib-jasmine --save-dev
grunt-contrib-jasmine
o cara que testa seu código e te avisa
grunt.initConfig({
jasmine: {
src: 'src/**/*.js',
options: {
specs: 'spec/*Spec.js',
helpers: 'spec/*Helper.js'
}
}
});
jasmine
no Gruntfile.js
$ grunt jasmine
rodando manualmente
testes automatizados
suites de testes
grunt-contrib-jasminejasmine
mocha
qunit
grunt-simple-mocha
grunt-contrib-qunit
watch
fique de olho
widget.scss
widget.cs
s
save file
all.min.j
sall.js
uglify
compass
$ npm install grunt-contrib-watch --save-dev
grunt-contrib-watch
o cara que vigia tudo para você
grunt.initConfig({
watch: {
scripts: {
files: ['src/**/*.js'],
tasks: ['concat:scripts', 'uglify']
}
}
});
watch
no Gruntfile.js
concatenação
js/css lint
testes
criar sprites
pré-processadores
live reloading
tarefas comuns para
watch
na prática
globo esporte
setup
6 semanas!
faça suas escolhas
sabiamente
obrigado!
/almirfilho
/almirfilho
/davidsonfellipe
/davidsonfellipe

Mais conteúdo relacionado

Mais procurados

Uma visão rápida sobre Nodejs
Uma visão rápida sobre NodejsUma visão rápida sobre Nodejs
Uma visão rápida sobre NodejsRafael Soares
 
Performance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.jsPerformance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.jsWaldyr Felix
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.Filipe Morelli
 
Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Felipe Klerk Signorini
 
Desenvolvendo para WordPress com Docker, Git e WP-CLI
Desenvolvendo para WordPress com Docker, Git e WP-CLIDesenvolvendo para WordPress com Docker, Git e WP-CLI
Desenvolvendo para WordPress com Docker, Git e WP-CLIRudá Almeida
 
Workshop react + adonis.js
Workshop react + adonis.jsWorkshop react + adonis.js
Workshop react + adonis.jsDenis Velrino
 
O que você precisa saber sobre ASP.NET CORE
O que você precisa saber sobre ASP.NET COREO que você precisa saber sobre ASP.NET CORE
O que você precisa saber sobre ASP.NET CORERodrigo Kono
 
From Development to Production: Vagrant and Ansible, por Erika Heidi
From Development to Production: Vagrant and Ansible, por Erika HeidiFrom Development to Production: Vagrant and Ansible, por Erika Heidi
From Development to Production: Vagrant and Ansible, por Erika HeidiiMasters
 
TDC 2014 - SP - Bower & Robygems - Cada um no seu quadrado
TDC 2014 - SP - Bower & Robygems - Cada um no seu quadradoTDC 2014 - SP - Bower & Robygems - Cada um no seu quadrado
TDC 2014 - SP - Bower & Robygems - Cada um no seu quadradoCezinha Anjos
 
.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?akamud
 
Docker para Desenvolvedores - Developers-BR - Agosto-2018
Docker para Desenvolvedores - Developers-BR - Agosto-2018Docker para Desenvolvedores - Developers-BR - Agosto-2018
Docker para Desenvolvedores - Developers-BR - Agosto-2018Renato Groff
 
Docker para Desenvolvedores - Developers-BR - Julho-2018
Docker para Desenvolvedores - Developers-BR - Julho-2018Docker para Desenvolvedores - Developers-BR - Julho-2018
Docker para Desenvolvedores - Developers-BR - Julho-2018Renato Groff
 
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobileXamarin + TDD - Reagindo rápido à mudanças no mundo mobile
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobileakamud
 

Mais procurados (20)

Uma visão rápida sobre Nodejs
Uma visão rápida sobre NodejsUma visão rápida sobre Nodejs
Uma visão rápida sobre Nodejs
 
Por que Node JS?
Por que Node JS?Por que Node JS?
Por que Node JS?
 
Performance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.jsPerformance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.js
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.
 
PHP no Windows Azure
PHP no Windows AzurePHP no Windows Azure
PHP no Windows Azure
 
Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016
 
Desenvolvendo para WordPress com Docker, Git e WP-CLI
Desenvolvendo para WordPress com Docker, Git e WP-CLIDesenvolvendo para WordPress com Docker, Git e WP-CLI
Desenvolvendo para WordPress com Docker, Git e WP-CLI
 
Node js - Javascript Server Side
Node js - Javascript Server SideNode js - Javascript Server Side
Node js - Javascript Server Side
 
Workshop react + adonis.js
Workshop react + adonis.jsWorkshop react + adonis.js
Workshop react + adonis.js
 
Debug de cabo a rabo
Debug de cabo a raboDebug de cabo a rabo
Debug de cabo a rabo
 
React Native
React NativeReact Native
React Native
 
O que você precisa saber sobre ASP.NET CORE
O que você precisa saber sobre ASP.NET COREO que você precisa saber sobre ASP.NET CORE
O que você precisa saber sobre ASP.NET CORE
 
From Development to Production: Vagrant and Ansible, por Erika Heidi
From Development to Production: Vagrant and Ansible, por Erika HeidiFrom Development to Production: Vagrant and Ansible, por Erika Heidi
From Development to Production: Vagrant and Ansible, por Erika Heidi
 
TDC 2014 - SP - Bower & Robygems - Cada um no seu quadrado
TDC 2014 - SP - Bower & Robygems - Cada um no seu quadradoTDC 2014 - SP - Bower & Robygems - Cada um no seu quadrado
TDC 2014 - SP - Bower & Robygems - Cada um no seu quadrado
 
Grunt
GruntGrunt
Grunt
 
.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?
 
Docker para Desenvolvedores - Developers-BR - Agosto-2018
Docker para Desenvolvedores - Developers-BR - Agosto-2018Docker para Desenvolvedores - Developers-BR - Agosto-2018
Docker para Desenvolvedores - Developers-BR - Agosto-2018
 
Docker para Desenvolvedores - Developers-BR - Julho-2018
Docker para Desenvolvedores - Developers-BR - Julho-2018Docker para Desenvolvedores - Developers-BR - Julho-2018
Docker para Desenvolvedores - Developers-BR - Julho-2018
 
Gulp
GulpGulp
Gulp
 
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobileXamarin + TDD - Reagindo rápido à mudanças no mundo mobile
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile
 

Semelhante a grunt - O automatizador de tarefas front-end

Dockerizando aplicações em uma Fintech
Dockerizando aplicações em uma FintechDockerizando aplicações em uma Fintech
Dockerizando aplicações em uma FintechRafael Gomes
 
Jruby, o melhor de 2 mundos (MacGyver + ChuckNorris)
Jruby, o melhor de 2 mundos (MacGyver + ChuckNorris)Jruby, o melhor de 2 mundos (MacGyver + ChuckNorris)
Jruby, o melhor de 2 mundos (MacGyver + ChuckNorris)Marcio Sfalsin
 
Tecnologias para desenvolvimento ágil de aplicações Web-Isemanatsi_UTFPR
Tecnologias para desenvolvimento ágil de aplicações Web-Isemanatsi_UTFPRTecnologias para desenvolvimento ágil de aplicações Web-Isemanatsi_UTFPR
Tecnologias para desenvolvimento ágil de aplicações Web-Isemanatsi_UTFPRAlessandro Dias
 
Pangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformPangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformAndré Paulovich
 
Docker - minicurso utfpr 2017
Docker -  minicurso utfpr 2017Docker -  minicurso utfpr 2017
Docker - minicurso utfpr 2017Fabio Janiszevski
 
Reinventar a roda a cada novo framework js, vale a pena?
Reinventar a roda a cada novo framework js, vale a pena?Reinventar a roda a cada novo framework js, vale a pena?
Reinventar a roda a cada novo framework js, vale a pena?Fernanda Bernardo
 
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando PimentaIniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando Pimentamichel adriano medeiros
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Emerson Macedo
 
Dockerizando aplicações em uma fintech o bom, o mau e o feio as surpresas
Dockerizando aplicações em uma fintech  o bom, o mau e o feio as surpresasDockerizando aplicações em uma fintech  o bom, o mau e o feio as surpresas
Dockerizando aplicações em uma fintech o bom, o mau e o feio as surpresasRafael Gomes
 
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...Felipe Blini
 
Docker Swarm - Sua aplicação pronta para escalar
Docker Swarm - Sua aplicação pronta para escalarDocker Swarm - Sua aplicação pronta para escalar
Docker Swarm - Sua aplicação pronta para escalargustavomtborges
 
O que há de novo no Microsoft Azure IaaS
O que há de novo no Microsoft Azure IaaSO que há de novo no Microsoft Azure IaaS
O que há de novo no Microsoft Azure IaaSLucas A. Romão
 
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsJava script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsVinicius Reis
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerGiovanni Kenji Shiroma
 
Utilize o vso e publique imagens docker Global Azure Bootcamp - BH
Utilize o vso e publique imagens docker Global Azure Bootcamp - BHUtilize o vso e publique imagens docker Global Azure Bootcamp - BH
Utilize o vso e publique imagens docker Global Azure Bootcamp - BHIvan Paulovich
 

Semelhante a grunt - O automatizador de tarefas front-end (20)

Dockerizando aplicações em uma Fintech
Dockerizando aplicações em uma FintechDockerizando aplicações em uma Fintech
Dockerizando aplicações em uma Fintech
 
Jruby, o melhor de 2 mundos (MacGyver + ChuckNorris)
Jruby, o melhor de 2 mundos (MacGyver + ChuckNorris)Jruby, o melhor de 2 mundos (MacGyver + ChuckNorris)
Jruby, o melhor de 2 mundos (MacGyver + ChuckNorris)
 
Tecnologias para desenvolvimento ágil de aplicações Web-Isemanatsi_UTFPR
Tecnologias para desenvolvimento ágil de aplicações Web-Isemanatsi_UTFPRTecnologias para desenvolvimento ágil de aplicações Web-Isemanatsi_UTFPR
Tecnologias para desenvolvimento ágil de aplicações Web-Isemanatsi_UTFPR
 
Pangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformPangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud Platform
 
Conceitos Basicos e Docker - Java Noroeste
Conceitos Basicos e Docker - Java NoroesteConceitos Basicos e Docker - Java Noroeste
Conceitos Basicos e Docker - Java Noroeste
 
Docker compose
Docker composeDocker compose
Docker compose
 
Docker - minicurso utfpr 2017
Docker -  minicurso utfpr 2017Docker -  minicurso utfpr 2017
Docker - minicurso utfpr 2017
 
Reinventar a roda a cada novo framework js, vale a pena?
Reinventar a roda a cada novo framework js, vale a pena?Reinventar a roda a cada novo framework js, vale a pena?
Reinventar a roda a cada novo framework js, vale a pena?
 
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando PimentaIniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010
 
Dockerizando aplicações em uma fintech o bom, o mau e o feio as surpresas
Dockerizando aplicações em uma fintech  o bom, o mau e o feio as surpresasDockerizando aplicações em uma fintech  o bom, o mau e o feio as surpresas
Dockerizando aplicações em uma fintech o bom, o mau e o feio as surpresas
 
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
 
Docker Swarm - Sua aplicação pronta para escalar
Docker Swarm - Sua aplicação pronta para escalarDocker Swarm - Sua aplicação pronta para escalar
Docker Swarm - Sua aplicação pronta para escalar
 
Meetup fujitsu
Meetup fujitsuMeetup fujitsu
Meetup fujitsu
 
O que há de novo no Microsoft Azure IaaS
O que há de novo no Microsoft Azure IaaSO que há de novo no Microsoft Azure IaaS
O que há de novo no Microsoft Azure IaaS
 
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsJava script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
 
Aplicações web realtime
Aplicações web realtimeAplicações web realtime
Aplicações web realtime
 
Aula Ruby
Aula RubyAula Ruby
Aula Ruby
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
 
Utilize o vso e publique imagens docker Global Azure Bootcamp - BH
Utilize o vso e publique imagens docker Global Azure Bootcamp - BHUtilize o vso e publique imagens docker Global Azure Bootcamp - BH
Utilize o vso e publique imagens docker Global Azure Bootcamp - BH
 

Mais de Almir Filho

256 Shades of R, G and B
256 Shades of R, G and B256 Shades of R, G and B
256 Shades of R, G and BAlmir Filho
 
The Creative Developer
The Creative DeveloperThe Creative Developer
The Creative DeveloperAlmir Filho
 
Throttle and Debounce Patterns in Web Apps
Throttle and Debounce Patterns in Web AppsThrottle and Debounce Patterns in Web Apps
Throttle and Debounce Patterns in Web AppsAlmir Filho
 
CSS Layout: O ontem, o hoje e o depois
CSS Layout: O ontem, o hoje e o depoisCSS Layout: O ontem, o hoje e o depois
CSS Layout: O ontem, o hoje e o depoisAlmir Filho
 
HTML5 Sensitivo: Seu browser no plano astral
HTML5 Sensitivo: Seu browser no plano astralHTML5 Sensitivo: Seu browser no plano astral
HTML5 Sensitivo: Seu browser no plano astralAlmir Filho
 
HTML5: seu navegador não é mais o mesmo
HTML5: seu navegador não é mais o mesmoHTML5: seu navegador não é mais o mesmo
HTML5: seu navegador não é mais o mesmoAlmir Filho
 

Mais de Almir Filho (7)

256 Shades of R, G and B
256 Shades of R, G and B256 Shades of R, G and B
256 Shades of R, G and B
 
The Creative Developer
The Creative DeveloperThe Creative Developer
The Creative Developer
 
Throttle and Debounce Patterns in Web Apps
Throttle and Debounce Patterns in Web AppsThrottle and Debounce Patterns in Web Apps
Throttle and Debounce Patterns in Web Apps
 
CSS Layout: O ontem, o hoje e o depois
CSS Layout: O ontem, o hoje e o depoisCSS Layout: O ontem, o hoje e o depois
CSS Layout: O ontem, o hoje e o depois
 
Web Audio Hero
Web Audio HeroWeb Audio Hero
Web Audio Hero
 
HTML5 Sensitivo: Seu browser no plano astral
HTML5 Sensitivo: Seu browser no plano astralHTML5 Sensitivo: Seu browser no plano astral
HTML5 Sensitivo: Seu browser no plano astral
 
HTML5: seu navegador não é mais o mesmo
HTML5: seu navegador não é mais o mesmoHTML5: seu navegador não é mais o mesmo
HTML5: seu navegador não é mais o mesmo
 

grunt - O automatizador de tarefas front-end