Files
markamoser.com/Gruntfile.js
2017-08-23 14:43:50 -05:00

149 lines
3.3 KiB
JavaScript

module.exports = function(grunt) {
'use strict';
require('load-grunt-tasks')(grunt);
grunt.initConfig({
config: {
source: 'site',
dest: 'dist',
temp: '.tmp'
},
eslint: {
// http://eslint.org/docs/rules/
target: '<%= config.source %>/assets/js/**/*'
},
sasslint: {
// https://github.com/sasstools/sass-lint/tree/master/docs/rules
target: '<%= config.source %>/assets/scss/**/*'
},
clean: {
build: {
files: [{
dot: true,
src: [
'<%= config.dest %>/*',
'!<%= config.dest %>/video/*'
]
}]
}
},
sass: {
options: {
sourceMap: true,
includePaths: [
'<%= config.source %>/assets/scss/'
]
},
build: {
files: {
'<%= config.dest %>/assets/css/main.css': '<%= config.source %>/assets/scss/main.scss'
}
}
},
postcss: {
options: {
map: true,
processors: [
require('autoprefixer')({browsers: ['last 2 versions']})
]
},
dist: {
src: '<%= config.dest %>/assets/css/main.css'
}
},
copy: {
assets: {
files: [{
expand: true,
cwd: '<%= config.source %>/assets/',
src: ['{fonts,img,icon,data,vendor}/**/*'],
dest: '<%= config.dest %>/assets/'
}]
},
misc: {
files: [{
expand: true,
cwd: '<%= config.source %>',
src: [
'favicon.ico'
],
dest: '<%= config.dest %>'
}]
}
},
assemble: {
options: {
assets: '<%= config.dest %>/assets',
data: 'template_data/*.json',
flatten: true,
layout: 'default.hbs',
layoutdir: '<%= config.source %>/layouts',
partials: '<%= config.source %>/partials/**/*.hbs'
},
build: {
files: [{'<%= config.dest %>/': ['<%= config.source %>/pages/**/*.hbs']}]
}
},
watch: {
images: {
files: '<%= config.source %>/img/**/*',
tasks: ['copy:assets']
},
scss: {
files: '<%= config.source %>/assets/**/*.scss',
tasks: ['concurrent:scssWatch']
},
js: {
files: '<%= config.source %>/assets/**/*.{json,js}',
tasks: ['concurrent:jsWatch']
},
assemble: {
files: '<%= config.source %>/**/*.hbs',
tasks: ['assemble:build']
}
},
concurrent: {
scssWatch: ['sasslint', ['sass:build', 'postcss']],
jsWatch: ['eslint', 'babel']
},
browserSync: {
serve: {
bsFiles: { src: [ '<%= config.dest %>/**.*' ] },
options: {
watchTask: true,
server: '<%= config.dest %>',
browser: ["google chrome"],
// tunnel: true,
open: 'external',
notify: false,
ghostMode: {
clicks: true,
forms: true,
scroll: true
}
}
}
}
});
// Tasks
grunt.registerTask('lint', ['sasslint', 'eslint']);
grunt.registerTask('build', ['clean:build', 'copy', 'sass', 'postcss', 'assemble']);
grunt.registerTask('default', ['lint', 'build']);
grunt.registerTask('serve', ['lint', 'build', 'browserSync', 'watch']);
};