|
// Generated on 2013-08-28 using generator-webapp 0.4.1 |
|
'use strict'; |
|
var LIVERELOAD_PORT = 35729; |
|
var lrSnippet = require('connect-livereload')({port: LIVERELOAD_PORT}); |
|
var mountFolder = function (connect, dir) { |
|
return connect.static(require('path').resolve(dir)); |
|
}; |
|
|
|
// # Globbing |
|
// for performance reasons we're only matching one level down: |
|
// 'test/spec/{,*/}*.js' |
|
// use this if you want to recursively match all subfolders: |
|
// 'test/spec/**/*.js' |
|
|
|
module.exports = function (grunt) { |
|
// show elapsed time at the end |
|
require('time-grunt')(grunt); |
|
// load all grunt tasks |
|
require('load-grunt-tasks')(grunt); |
|
|
|
// configurable paths |
|
var yeomanConfig = { |
|
app: 'app', |
|
dist: 'dist' |
|
}; |
|
|
|
grunt.initConfig({ |
|
yeoman: yeomanConfig, |
|
watch: { |
|
coffee: { |
|
files: ['<%= yeoman.app %>/scripts/{,*/}*.coffee'], |
|
tasks: ['coffee:dist'] |
|
}, |
|
coffeeTest: { |
|
files: ['test/spec/{,*/}*.coffee'], |
|
tasks: ['coffee:test'] |
|
}, |
|
compass: { |
|
files: ['<%= yeoman.app %>/styles/{,*/}*.{scss,sass}'], |
|
tasks: ['compass:server', 'autoprefixer'] |
|
}, |
|
styles: { |
|
files: ['<%= yeoman.app %>/styles/{,*/}*.css'], |
|
tasks: ['copy:styles', 'autoprefixer'] |
|
}, |
|
jade: { |
|
files: ['<%= yeoman.app %>/{,*/}*.jade'], |
|
tasks: ['jade'] |
|
}, |
|
livereload: { |
|
options: { |
|
livereload: LIVERELOAD_PORT |
|
}, |
|
files: [ |
|
'{<%= yeoman.app %>,.tmp}/{,*/}*.html', |
|
'.tmp/styles/{,*/}*.css', |
|
'{.tmp,<%= yeoman.app %>}/scripts/{,*/}*.js', |
|
'<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}' |
|
] |
|
} |
|
}, |
|
connect: { |
|
options: { |
|
port: 9000, |
|
// change this to '0.0.0.0' to access the server from outside |
|
hostname: 'localhost' |
|
}, |
|
livereload: { |
|
options: { |
|
middleware: function (connect) { |
|
return [ |
|
lrSnippet, |
|
mountFolder(connect, '.tmp'), |
|
mountFolder(connect, yeomanConfig.app) |
|
]; |
|
} |
|
} |
|
}, |
|
test: { |
|
options: { |
|
middleware: function (connect) { |
|
return [ |
|
mountFolder(connect, '.tmp'), |
|
mountFolder(connect, 'test'), |
|
mountFolder(connect, yeomanConfig.app) |
|
]; |
|
} |
|
} |
|
}, |
|
dist: { |
|
options: { |
|
middleware: function (connect) { |
|
return [ |
|
mountFolder(connect, yeomanConfig.dist) |
|
]; |
|
} |
|
} |
|
} |
|
}, |
|
open: { |
|
server: { |
|
path: 'http://localhost:<%= connect.options.port %>' |
|
} |
|
}, |
|
jade: { |
|
dist: { |
|
options: { |
|
pretty: true |
|
}, |
|
files: [{ |
|
expand: true, |
|
cwd: '<%= yeoman.app %>', |
|
dest: '.tmp', |
|
src: '{,*/}*.jade', |
|
ext: '.html' |
|
}] |
|
} |
|
}, |
|
clean: { |
|
dist: { |
|
files: [{ |
|
dot: true, |
|
src: [ |
|
'.tmp', |
|
'<%= yeoman.dist %>/*', |
|
'!<%= yeoman.dist %>/.git*' |
|
] |
|
}] |
|
}, |
|
server: '.tmp' |
|
}, |
|
jshint: { |
|
options: { |
|
jshintrc: '.jshintrc' |
|
}, |
|
all: [ |
|
'Gruntfile.js', |
|
'<%= yeoman.app %>/scripts/{,*/}*.js', |
|
'!<%= yeoman.app %>/scripts/vendor/*', |
|
'test/spec/{,*/}*.js' |
|
] |
|
}, |
|
mocha: { |
|
all: { |
|
options: { |
|
run: true, |
|
urls: ['http://localhost:<%= connect.options.port %>/index.html'] |
|
} |
|
} |
|
}, |
|
coffee: { |
|
dist: { |
|
files: [{ |
|
expand: true, |
|
cwd: '<%= yeoman.app %>/scripts', |
|
src: '{,*/}*.coffee', |
|
dest: '.tmp/scripts', |
|
ext: '.js' |
|
}] |
|
}, |
|
test: { |
|
files: [{ |
|
expand: true, |
|
cwd: 'test/spec', |
|
src: '{,*/}*.coffee', |
|
dest: '.tmp/spec', |
|
ext: '.js' |
|
}] |
|
} |
|
}, |
|
compass: { |
|
options: { |
|
sassDir: '<%= yeoman.app %>/styles', |
|
cssDir: '.tmp/styles', |
|
generatedImagesDir: '.tmp/images/generated', |
|
imagesDir: '<%= yeoman.app %>/images', |
|
javascriptsDir: '<%= yeoman.app %>/scripts', |
|
fontsDir: '<%= yeoman.app %>/styles/fonts', |
|
importPath: '<%= yeoman.app %>/bower_components', |
|
httpImagesPath: '/images', |
|
httpGeneratedImagesPath: '/images/generated', |
|
httpFontsPath: '/styles/fonts', |
|
relativeAssets: false |
|
}, |
|
dist: { |
|
options: { |
|
generatedImagesDir: '<%= yeoman.dist %>/images/generated' |
|
} |
|
}, |
|
server: { |
|
options: { |
|
debugInfo: true |
|
} |
|
} |
|
}, |
|
autoprefixer: { |
|
options: { |
|
browsers: ['last 1 version'] |
|
}, |
|
dist: { |
|
files: [{ |
|
expand: true, |
|
cwd: '.tmp/styles/', |
|
src: '{,*/}*.css', |
|
dest: '.tmp/styles/' |
|
}] |
|
} |
|
}, |
|
// not used since Uglify task does concat, |
|
// but still available if needed |
|
/*concat: { |
|
dist: {} |
|
},*/ |
|
'bower-install': { |
|
app: { |
|
html: '<%= yeoman.app %>/index.html', |
|
ignorePath: '<%= yeoman.app %>/' |
|
} |
|
}, |
|
// not enabled since usemin task does concat and uglify |
|
// check index.html to edit your build targets |
|
// enable this task if you prefer defining your build targets here |
|
/*uglify: { |
|
dist: {} |
|
},*/ |
|
rev: { |
|
dist: { |
|
files: { |
|
src: [ |
|
'<%= yeoman.dist %>/scripts/{,*/}*.js', |
|
'<%= yeoman.dist %>/styles/{,*/}*.css', |
|
'<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp}', |
|
'<%= yeoman.dist %>/styles/fonts/{,*/}*.*' |
|
] |
|
} |
|
} |
|
}, |
|
useminPrepare: { |
|
options: { |
|
dest: '<%= yeoman.dist %>' |
|
}, |
|
html: '.tmp/index.html' |
|
}, |
|
usemin: { |
|
options: { |
|
dirs: ['<%= yeoman.dist %>'] |
|
}, |
|
html: ['<%= yeoman.dist %>/{,*/}*.html'], |
|
css: ['<%= yeoman.dist %>/styles/{,*/}*.css'] |
|
}, |
|
imagemin: { |
|
dist: { |
|
files: [{ |
|
expand: true, |
|
cwd: '<%= yeoman.app %>/images', |
|
src: '{,*/}*.{png,jpg,jpeg}', |
|
dest: '<%= yeoman.dist %>/images' |
|
}] |
|
} |
|
}, |
|
svgmin: { |
|
dist: { |
|
files: [{ |
|
expand: true, |
|
cwd: '<%= yeoman.app %>/images', |
|
src: '{,*/}*.svg', |
|
dest: '<%= yeoman.dist %>/images' |
|
}] |
|
} |
|
}, |
|
htmlmin: { |
|
dist: { |
|
files: [{ |
|
expand: true, |
|
cwd: '.tmp', |
|
src: '*.html', |
|
dest: '<%= yeoman.dist %>' |
|
}] |
|
} |
|
}, |
|
// Put files not handled in other tasks here |
|
copy: { |
|
dist: { |
|
files: [{ |
|
expand: true, |
|
dot: true, |
|
cwd: '<%= yeoman.app %>', |
|
dest: '<%= yeoman.dist %>', |
|
src: [ |
|
'*.{ico,png,txt}', |
|
'.htaccess', |
|
'images/{,*/}*.{webp,gif}', |
|
'styles/fonts/{,*/}*.*' |
|
] |
|
}] |
|
}, |
|
styles: { |
|
expand: true, |
|
dot: true, |
|
cwd: '<%= yeoman.app %>/styles', |
|
dest: '.tmp/styles/', |
|
src: '{,*/}*.css' |
|
} |
|
}, |
|
concurrent: { |
|
server: [ |
|
'compass', |
|
'jade', |
|
'coffee:dist', |
|
'copy:styles' |
|
], |
|
test: [ |
|
'coffee', |
|
'copy:styles' |
|
], |
|
dist: [ |
|
'coffee', |
|
'compass', |
|
'copy:styles', |
|
'imagemin', |
|
'svgmin', |
|
'htmlmin' |
|
] |
|
} |
|
}); |
|
|
|
grunt.registerTask('server', function (target) { |
|
if (target === 'dist') { |
|
return grunt.task.run(['build', 'open', 'connect:dist:keepalive']); |
|
} |
|
|
|
grunt.task.run([ |
|
'clean:server', |
|
'concurrent:server', |
|
'autoprefixer', |
|
'connect:livereload', |
|
'open', |
|
'watch' |
|
]); |
|
}); |
|
|
|
grunt.registerTask('test', [ |
|
'clean:server', |
|
'concurrent:test', |
|
'autoprefixer', |
|
'connect:test', |
|
'mocha' |
|
]); |
|
|
|
grunt.registerTask('build', [ |
|
'clean:dist', |
|
'jade', |
|
'useminPrepare', |
|
'concurrent:dist', |
|
'autoprefixer', |
|
'concat', |
|
'cssmin', |
|
'uglify', |
|
'copy:dist', |
|
'rev', |
|
'usemin' |
|
]); |
|
|
|
grunt.registerTask('default', [ |
|
'jshint', |
|
'test', |
|
'build' |
|
]); |
|
}; |