Skip to content

Instantly share code, notes, and snippets.

@Couto
Created September 11, 2013 09:34
Show Gist options
  • Save Couto/6521391 to your computer and use it in GitHub Desktop.
Save Couto/6521391 to your computer and use it in GitHub Desktop.
/*jshint node:true*/
module.exports = function (grunt) {
'use strict';
grunt.initConfig({
files: {
http : '/',
html: '../application/views',
css : 'stylesheets',
sass : 'sass',
imgs : 'images',
js : 'scripts',
hbs: 'scripts/app/library/templates/',
output: {
html: '../application/views',
css : 'stylesheets',
imgs : 'images',
js : 'scripts',
hbs: 'scripts/app/library/templates/compiled'
}
},
jshint: {
options: {
jshintrc: '.jshintrc'
},
src: ['<%= files.js %>/**/*.js', '!**/third_party/**']
},
groundskeeper: {
ie: {
expand: true,
cwd: '<%= files.js %>',
src: ['**/*.js', '!**/plugins/**'],
dest: '<%= files.output.js %>',
options: {
pragmas: ['development', 'debugging', 'validation']
}
},
prod: {
expand: true,
cwd: '<%= files.js %>',
src: ['**/*.js', '!**/plugins/**'],
dest: '<%= files.output.js %>',
options: {
pragmas: ['development', 'debugging', 'validation']
}
}
},
htmlmin: {
prod: {
expand: true,
cwd: '<%= files.html %>',
src: ['**/*.php'],
dest: '<%= files.output.html %>',
options: {
removeComments: true,
removeCDATASectionsFromCDATA: true,
collapseWhitespace: true,
removeRedundantAttributes: true,
removeEmptyAttributes: true
}
}
},
cssmin: {
prod: {
expand: true,
cwd: '<%= files.output.css %>',
src: ['**/*.css'],
dest: '<%= files.output.css %>',
options: {
banner: false,
keepSpecialComments: 0,
report: 'gzip',
removeRedundantAttributes: true,
removeEmptyAttributes: true
}
}
},
imagemin: {
prod: {
options: {
trials: 7,
progressive: true
},
expand: true,
cwd: '<%= files.imgs %>',
src: ['**/**/*.jpg', '**/**/*.png', '**/**/*.gif'],
dest: '<%= files.output.imgs %>/'
}
},
handlebars: {
prod: {
options: {
processContent: function (content) {
return content
.replace(/^[\x20\t]+/mg, '')
.replace(/[\x20\t]+$/mg, '')
.replace(/^[\r\n]+/, '')
.replace(/[\r\n]*$/, '\n');
},
processName: function (filePath) {
return filePath
.replace('scripts/app/library/templates/', '')
.replace('.handlebars', '');
},
namespace: 'Handlebars.templates'
},
expand: true,
cwd: '<%= files.hbs %>',
src: ['**/*.handlebars'],
dest: '<%= files.output.hbs %>',
ext: '.js'
}
},
uglify: {
hbs: {
options: { report: 'gzip' },
expand: true,
cwd: '<%= files.output.hbs %>',
src: ['**/*.js'],
dest: '<%= files.output.hbs %>'
},
js: {
options: {
compress: true,
mangle: true,
report: 'gzip',
preserveComments: 'false'
},
expand: true,
cwd: '<%= files.js %>',
src: ['**/*.js', '!**/**/fineuploader_min.js'],
dest: '<%= files.output.js %>'
}
},
compass: {
dev: {
'http_path' : '<%= files.http_path %>',
'css_dir' : '<%= files.css %>',
'sass_dir' : '<%= files.sass %>',
'images_dir' : '<%= files.imgs %>',
'javascripts_dir' : '<%= files.js %>',
'environment': 'development'
},
prod: {
'http_path' : '<%= files.http_path %>',
'css_dir' : '<%= files.output.css %>',
'sass_dir' : '<%= files.sass %>',
'images_dir' : '<%= files.imgs %>',
'javascripts_dir' : '<%= files.js %>',
'enviroment': 'production',
'outputStyle': 'compressed'
}
},
watch: {
sass: {
files: '<%= files.sass %>/**/*.scss',
tasks: ['compass:dev']
},
jshint: {
files: '<%= files.js %>/**/*.js',
tasks: ['jshint']
},
dev: {
files: ['<%= files.sass %>/**/*.scss', '<%= files.js %>/**/*.js'],
tasks: ['compass:dev', 'jshint']
}
},
clean: {
css: ['<%= files.output.css %>'],
hbs: ['<%= files.output.hbs %>'],
imgs: ['<%= files.output.imgs %>'] // dev purposes only
},
compress: {
build: {
options: {
archive: 'resources.tar.gz',
mode: 'tgz'
},
files: [{
src: ['./**/*'],
dest: '.'
}]
}
}
});
// Load tasks
Object
.keys(require('./package.json').devDependencies)
.forEach(function (key) {
return (/^grunt-/).test(key) && grunt.loadNpmTasks(key);
});
grunt.registerTask('css', ['clean:css', 'compass:prod', 'cssmin:prod']);
grunt.registerTask('hbs', ['clean:hbs', 'handlebars:prod', 'uglify:hbs']);
grunt.registerTask('js', ['groundskeeper:prod', 'uglify:js']);
grunt.registerTask('img', [ 'imagemin:prod']);
grunt.registerTask('build', ['css', 'hbs', 'js', 'img', 'compress']);
grunt.registerTask('default', ['watch:sass']);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment