Esse cara é o grunt

Davidson Fellipe
Davidson FellipeSenior Front-end Engineer
esse cara é o

grunt
@almirfilho
@davidsonfellipe
Esse cara é o grunt
@davidsonfellipe

@almirfilho
globo
.com
o

rei
do workflow

front-end
automatizador de tarefas
linha de comando
nodejs
o grunt não
é o único
make

shell

ant

java

rake

ruby

cake

coffeescript
downloads 2013
downloads 2013
300k

200k

100k

jan

fev

mar

abr

mai

jun

jul

ago

set

out

nov
Esse cara é o grunt
por que

automatizamos?
minimizar trabalho

repetitivo
muitos
para

detalhes

lembrar
linting

conversão

compilação

testes

minificação

frameworks
e libs
útil para projetos

complexos
dev

prod

rodar testes
pré-processadores:dev
js/css lint
web server
scaffolding
otimizar imagens
criar sprites
live reloading
minificação e obfuscação
concatenação
pré-processadores:prod
gerar release
deploy
eficiência!
produtividade!
paz de
espírito
iniciando com

grunt
primeiro as coisas primeiras

node.js & npm
instalação global
configuração
instalação local
configuração

grunt-cli
package.json
grunt & tools
Gruntfile.js
instalação global

grunt-cli
$ npm install -g grunt-cli
configuração

package.json
{
"name": "dave-fulero",
"version": "0.1.0",
"devDependencies": {
"grunt": "~0.4.2",
"grunt-contrib-uglify": "~0.2.2"
}
}
instalação local

grunt & tools
$ npm install
--save-dev
$ npm install nome-pacote --save-dev
configuração

Gruntfile.js
module.exports = function(grunt){
grunt.initConfig({
pkg: grunt.file.readJSON(‘package.json’),
uglify: {/* configuração da tarefa */}
});
grunt.loadNpmTasks(‘grunt-contrib-uglify’);
grunt.registerTask(‘default’, [‘uglify’]);
}
grunt.initConfig({
uglify: {
options: {
banner: ‘/* dave fulêro */n’
},
build: {
src: ‘src/<%= pkg.name %>.js’,
dest: ‘build/<%= pkg.name %>.min.js’
}
}
});
quem é

pop
concatenação
de arquivos

a.js
e.js
i.js
o.js
u.js

vogais.js
o cara que concatena seus arquivos

grunt-contrib-concat
$ npm install grunt-contrib-concat --save-dev
concat

no Gruntfile.js
grunt.initConfig({
concat: {
options: {
separator: ';',
},
dist: {
src: ['src/a.js', 'src/e.js'],
dest: 'build/vogais.js',
}
}
});
concatenação

rodando manualmente

$ grunt concat
obfuscação e
minificação
de scripts

all.js

all.min.js
var toSeconds = function(hour) {
return hour * 3600;
};

obfuscação
var toSeconds = function(a) {
return a * 3600;
};

minificação
var toSeconds=function(a){return a*3600;};
o cara que comprime seus arquivos

grunt-contrib-uglify
$ npm install grunt-contrib-uglify --save-dev
uglify

no Gruntfile.js

grunt.initConfig({
uglify: {
build: {
src: 'src/all.js',
dest: 'build/all.min.js'
}
}
});
obfuscação e minificação

rodando manualmente

$ grunt uglify
pré-processadores
de código

widget.scss

widget.css
o cara que compila seu sass

grunt-contrib-compass
$ npm install grunt-contrib-compass --save-dev
compass
no Gruntfile.js

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
}}}});
compilação de sass

rodando manualmente
$ grunt compass:dev

$ grunt compass:prod
pré-processadores
sass

grunt-contrib-sass

less

grunt-contrib-less

stylus

grunt-contrib-stylus

coffeescript

grunt-contrib-coffee
testes
automatizados

sucesso

specs
erro
o cara que testa seu código e te avisa

grunt-contrib-jasmine
$ npm install grunt-contrib-jasmine --save-dev
jasmine
no Gruntfile.js

grunt.initConfig({
jasmine: {
src: 'src/**/*.js',
options: {
specs: 'spec/*Spec.js',
helpers: 'spec/*Helper.js'
}
}
});
testes automatizados

rodando manualmente

$ grunt jasmine
suites de testes
jasmine
qunit
mocha

grunt-contrib-jasmine
grunt-contrib-qunit
grunt-simple-mocha
watch

fique de olho
all.js

all.min.js

save file
widget.css
widget.scss
o cara que vigia tudo para você

grunt-contrib-watch
$ npm install grunt-contrib-watch --save-dev
watch

no Gruntfile.js
grunt.initConfig({
watch: {
build: {
files: ['src/**/*.{scss, js}'],
tasks: [
'compass:dev', 'concat', 'uglify'
]
}
}
});
tarefas comuns para
watch
testes
pré-processadores
js/css lint
criar sprites
live reloading
concatenação
na prática
globo esporte
setup
6 semanas!
faça suas escolhas
sabiamente
globo
.com
/talentos
github.com/globocom/

IWantToWorkAtGloboCom
obrigado!
obrigado!

/almirfilho

/davidsonfellipe

/almirfilho

/davidsonfellipe
obrigado!
1 of 60

More Related Content

What's hot(20)

Node js - Javascript Server SideNode js - Javascript Server Side
Node js - Javascript Server Side
Gustavo Corrêa Alves1.3K views
Introdução ao Node.js - FATEC SPIntrodução ao Node.js - FATEC SP
Introdução ao Node.js - FATEC SP
Arthur Fücher1.5K views
Introdução ao NodeJSIntrodução ao NodeJS
Introdução ao NodeJS
Giovanni Bassi2.7K views
Workshop react + adonis.jsWorkshop react + adonis.js
Workshop react + adonis.js
Denis Velrino917 views
Conhecendo o NodejsConhecendo o Nodejs
Conhecendo o Nodejs
Caio Cutrim411 views
Deploy automático em projeto PHP - PHPSPIMA 2016Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016
Felipe Klerk Signorini467 views
PHP no Windows AzurePHP no Windows Azure
PHP no Windows Azure
Priscila Mayumi744 views
O que é nodejs, cases e vantagensO que é nodejs, cases e vantagens
O que é nodejs, cases e vantagens
Rodrigo Matheus2.4K views
Mean StackMean Stack
Mean Stack
Bruno Catão876 views
Desenvolvendo com Angular CLIDesenvolvendo com Angular CLI
Desenvolvendo com Angular CLI
Vanessa Me Tonini711 views
Uma visão rápida sobre NodejsUma visão rápida sobre Nodejs
Uma visão rápida sobre Nodejs
Rafael Soares933 views
Diego Narducci - React + AngularDiego Narducci - React + Angular
Diego Narducci - React + Angular
Diego Narducci664 views
Aprendendo Angular com a CLIAprendendo Angular com a CLI
Aprendendo Angular com a CLI
Vanessa Me Tonini865 views
[Testes] frameworks de testes end to-end baseados em node js [Testes] frameworks de testes end to-end baseados em node js
[Testes] frameworks de testes end to-end baseados em node js
Bárbara Cabral da Conceição, CTFL679 views
Debug de cabo a raboDebug de cabo a rabo
Debug de cabo a rabo
Ricardo Moraleida63 views

Viewers also liked(15)

Javascript Cross-browserJavascript Cross-browser
Javascript Cross-browser
Davidson Fellipe1.7K views
RioJS - Apresentação sobre o grupoRioJS - Apresentação sobre o grupo
RioJS - Apresentação sobre o grupo
Davidson Fellipe1.1K views
performance em jQuery appsperformance em jQuery apps
performance em jQuery apps
Davidson Fellipe2.1K views
frontend {retirante: nordestino;}frontend {retirante: nordestino;}
frontend {retirante: nordestino;}
Davidson Fellipe976 views
It's Javascript TimeIt's Javascript Time
It's Javascript Time
Davidson Fellipe1.5K views
Como é trabalhar na globocom?Como é trabalhar na globocom?
Como é trabalhar na globocom?
Davidson Fellipe2.5K views
CANVAS vs SVG @ FrontInRio 2011CANVAS vs SVG @ FrontInRio 2011
CANVAS vs SVG @ FrontInRio 2011
Davidson Fellipe1.7K views
Os segredos dos front end engineersOs segredos dos front end engineers
Os segredos dos front end engineers
Davidson Fellipe1.4K views
Guia do Front-end das GaláxiasGuia do Front-end das Galáxias
Guia do Front-end das Galáxias
Davidson Fellipe17.6K views

Similar to Esse cara é o grunt(20)

The Flash no front-endThe Flash no front-end
The Flash no front-end
Cezar Luiz812 views
Introdução ao NodejsIntrodução ao Nodejs
Introdução ao Nodejs
Márcio Silvestroni323 views
Docker composeDocker compose
Docker compose
Michael Castillo Granados216 views
Automação de build para frontendAutomação de build para frontend
Automação de build para frontend
Vanessa Me Tonini1.3K views
Precisamos falar sobre GradlePrecisamos falar sobre Gradle
Precisamos falar sobre Gradle
Wellington Pinheiro495 views
ZabbixZabbix
Zabbix
Comandos Linux1.6K views
IFSP 2015 - Cultura DevOpsIFSP 2015 - Cultura DevOps
IFSP 2015 - Cultura DevOps
Leonardo Comelli623 views
Iniciando com Ruby on Rails - Luiz Fernando PimentaIniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
michel adriano medeiros126 views
Aula RubyAula Ruby
Aula Ruby
Felipe Gadelha Ruoso109 views

Esse cara é o grunt