No desenvolvimento Front-End tem algumas tarefas que são como um castigo se feitas manualmente. Por isso, temos que automatizar algumas tarefas. Para nos auxiliar com isso, temos o GruntJS.
O GruntJS é um task runner
que automatiza tarefas e roda via terminal.
Instalação
Para rodá-lo, precisamos primeiramente ter o NodeJS e NPM, instalados.
Podendo ser baixado, aqui: NodeJS com NPM
Agora que já temos o NodeJS e NPM, instalados. Temos que instalar o GruntJS via terminal:
1 | npm install -g grunt-cli |
Podemos ver se está instalado com o commando:
1 | grunt --version |
Para o GruntJS funcionar, precisamos de 2 arquivos: package.json
e o Gruntfile.js
.
O package.json é um arquivo do NodeJS, onde terão as informações do projeto e os plugins do GruntJS. Ex:
1 | { |
O Gruntfile.js é o arquivo de configuração do GruntJS. Ex:
1 | module.exports = function( grunt ) { |
Para adicionar um plugin no seu package.json
, podemos utilizar os comandos:
Para as dependências para produção (dependencies
)
1 | npm install grunt --save |
Para dependências, apenas para o desenvolvimento (devDependencies
)
1 | npm install grunt --save-dev |
Se você está utilizando um package.json
, já com os plugins listados, basta executar o comando:
1 | npm install |
Configuração
Agora com os plugins instalados, precisando configurar cada tarefa para ser executado ao rodar o GruntJS
.
No link http://gruntjs.com/plugins, você pode conferir os plugins para o GruntJS
. Clicando no plugin desejado, será encaminhado para o host https://www.npmjs.com, onde terá as informações para a configuração do package
escolhido.
Como exemplo, escolhi o plugin grunt-contrib-uglify
, sendo levado para https://www.npmjs.com/package/grunt-contrib-uglify. Onde podemos conferir, como configurar a tarefa.
Abaixo, como podemos ver no método initConfig
, iremos passar um objeto com a configuração do plugin. Com o método loadNpmTasks
, informaremos a tarefa que deverá ser carregada. E para finalizar, devemos registrar as tarefas que teremos no projeto.
1 | module.exports = function( grunt ) { |
Para ficar mais claro, temos outro exemplo com mais plugins e tarefas.
1 | module.exports = function( grunt ) { |
Acima, temos a configuração dos plugins cssmin
e uglify
no Gruntfile.js
, onde os mesmos serão carregados com o método loadNpmTasks
e registramos 3 tarefas.
Executando as tarefas
No terminal, rodando o comando:
1 | grunt |
Será executada a lista de tarefas default
(cssmin
e uglify
)
Com o comando:
1 | grunt css |
Será executada a lista css
E o comando:
1 | grunt js |
a lista js
Acredito que ficou simples de compreender a lógica para utilizar as tarefas do GruntJS
. Com isso, temos tudo instalado e configurado. Agora só ser feliz com as tarefas automatizadas.
A dica
Dependendo da quantidade de configurações no seu Gruntfile.js
, a manutenção fica bem complicada. Para resolver o problema, podemos utilizar o plugin load-grunt-config
, para termos mais organização.
https://github.com/firstandthird/load-grunt-config O load-grunt-config, permite quebrar a configuração do Gruntfile.js
por tarefa. Você pode usar os arquivos na extensão .js , .json , .yaml , .cson , ou .coffee.
Instalando o plugin
1 | npm install load-grunt-config --save-dev |
O Gruntfile.js
, ficará semelhante ao exemplo abaixo:
1 | module.exports = function(grunt) { |
'source/_tasks'
- Será o caminho para onde estão os arquivos com as configurações das tarefas.
No objeto data, informamos as variáveis que será retornadas pelo parâmetro options
no arquivo de configuração de cada plugin, como podemos ver abaixo.
1 | module.exports = function(grunt, options){ |
No Gruntfile.js
, o caminho das configurações se encontram na pasta source/_tasks
e a estrutura ficaria assim:
1 | source |
A sua pasta com as tarefas precisará ter o arquivo aliases.(js|.json|yaml|cson|coffee)
para definir as suas tarefas.
Exemplo com a extensão .yaml
:
aliases.yaml
1 | default: |
Abaixo, um exemplo com a extensão .js
, da configuração de um plugin.
cssmin.js
1 | module.exports = function(grunt, options){ |
E assim, podemos utilizar o GruntJS
, para estar automatizando as tarefas que dão um bom trabalho se feitas manualmente e poupam um bom tempo, nos deixando mais produtivos.