A pouco tempo comecei a usar outras tecnologias otimizadoras no processo de desenvolvimento junto do Grails. São elas:
- sass
- jade
- handlebars
- coffee
Para tal necessidade eu fui atrás de alguns plugins do grails, mas não fiquei satisfeito com alguns deles. Primeiro por que alguns encontram-se desatualizados e com pouca documentação, e ainda tem alguns bugs. Ora, se pararmos para pensar, essas ferramentas são complementares ao desenvolvimento, apenas voltadas para a produtividade, então não se deve perder muito tempo com complexidades na configuração do ambiente. Para resolver o problema eu acabei usando uma estrutura separada do grails para o controle, uma que eu postei aqui no blog a poucos dias.. usando o gulp para realizar a tarefa.
Então foi simples.. Eu criei a seguinte estrutura no projeto grails (dentro de assets):
Para esse projeto uso a versão do grails 2.3.4, e essa versão ainda não trabalha com o plugin assets por padrão.
Crieu meu gulpfile com o seguinte script:
gulp = require 'gulp' sass = require 'gulp-sass' jade = require 'gulp-jade' coffee = require 'gulp-coffee' handlebars = require 'gulp-handlebars' concat = require 'gulp-concat' declare = require 'gulp-declare' wrap = require 'gulp-wrap' errorHandler = (err) -> console.log err sources = {} destinations = {} sources.sass = 'grails-app/assets/stylesheets/**/*.scss' sources.coffee = 'grails-app/assets/coffeescripts/**/*.coffee' sources.jade = 'grails-app/assets/jade/**/*.jade' sources.handlebars = 'grails-app/assets/templates/**/*.html' destinations.css = 'web-app/css' destinations.js = 'web-app/js' destinations.templates = 'grails-app/assets/templates' destinations.handlebars = 'web-app/js/bi/templates' watcher = (task) -> (evt) -> console.log 'run ' + evt.path gulp.start task gulp.task 'compile:sass', -> gulp.src(sources.sass) .pipe(sass({sourceComments: 'normal'}).on('error', errorHandler)) .pipe(gulp.dest(destinations.css)) gulp.task 'compile:coffee', -> gulp.src(sources.coffee) .pipe(coffee({bare: true, sourcemap: true}).on('error', errorHandler)) .pipe(gulp.dest(destinations.js)) gulp.task 'compile:jade', -> gulp.src(sources.jade) .pipe(jade().on('error', errorHandler)) .pipe(gulp.dest(destinations.templates)) gulp.task 'compile:handlebars', -> gulp.src(sources.handlebars) .pipe(handlebars()) .pipe(wrap('Handlebars.template(<%= contents %>)')) .pipe(declare({ namespace: 'View.templates', noRedeclare: true })) .pipe(concat('templates.js')) .pipe(gulp.dest(destinations.handlebars)) gulp.task 'default', -> gulp.start 'compile:sass', 'compile:coffee', 'compile:jade', 'compile:handlebars' gulp.task 'watch:sass', -> gulp.watch sources.sass, watcher 'compile:sass' gulp.task 'watch:coffee', -> gulp.watch sources.coffee, watcher 'compile:coffee' gulp.task 'watch:jade', -> gulp.watch sources.jade, watcher 'compile:jade' gulp.task 'watch:handlebars', -> gulp.watch sources.handlebars, watcher 'compile:handlebars' gulp.task 'watch', -> gulp.start 'watch:sass', 'watch:coffee', 'watch:jade', 'watch:handlebars'
E logo depois (ou antes) de subir meu projeto grails é só executar:
gulp watch
E então ficar atentos com o console do gulp quanto a erros de complilação. E não se esqueça de instalar as dependências usadas no gulp via npm.
Espero que ajude! Abraço
Nenhum comentário:
Postar um comentário