Files
grunt-assemble.io/Gruntfile.js
Mark Moser be34c5148b init
2017-09-06 14:45:05 -05:00

169 lines
3.9 KiB
JavaScript

/* eslint-disable no-undef */
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 %>/*'
]
}]
}
},
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: [
// browser list is managed in package.json
// http://browserl.ist/?q=last+2+versions
require('autoprefixer')()
]
},
dist: {
src: '<%= config.dest %>/assets/css/main.css'
}
},
copy: {
assets: {
files: [{
expand: true,
cwd: '<%= config.source %>/assets/',
src: ['{js,fonts,img,icon,data,vendor}/**/*'],
dest: '<%= config.dest %>/assets/'
}]
},
vendor: {
files: [{
expand: true,
flatten: true,
cwd: './node_modules/',
src: [
'normalize.css/normalize.css'
],
dest: '<%= config.dest %>/assets/vendor/'
}]
},
misc: {
files: [{
expand: true,
cwd: '<%= config.source %>',
src: [
'/assets/favicon.ico'
],
dest: '<%= config.dest %>'
}]
}
},
assemble: {
options: {
production: false,
assets: '<%= config.dest %>/assets',
data: '<%= config.source %>/data/*.yml',
flatten: true,
layout: 'default.hbs',
layoutdir: '<%= config.source %>/layouts',
partials: '<%= config.source %>/partials/**/*.hbs'
},
buildDev: {
files: [{'<%= config.dest %>/': ['<%= config.source %>/pages/**/*.hbs']}]
},
buildProd: {
options: {
production: true,
},
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:buildDev']
}
},
concurrent: {
scssWatch: ['sasslint', ['sass:build', 'postcss']],
jsWatch: ['eslint', 'babel']
},
browserSync: {
serve: {
bsFiles: { src: [ '<%= config.dest %>/**.*' ] },
options: {
watchTask: true,
server: '<%= config.dest %>',
open: 'local',
notify: false,
ghostMode: {
clicks: true,
forms: true,
scroll: true
}
}
}
}
});
// Tasks
grunt.registerTask('lint', ['sasslint', 'eslint']);
grunt.registerTask('build', ['clean:build', 'copy', 'sass', 'postcss', 'assemble:buildDev']);
grunt.registerTask('buildProd', ['clean:build', 'copy', 'sass', 'postcss', 'assemble:buildProd']);
grunt.registerTask('default', ['lint', 'build']);
grunt.registerTask('serve', ['lint', 'build', 'browserSync', 'watch']);
};