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: ['{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/' }] }, video: { files: [{ expand: true, flatten: true, cwd: '<%= config.source %>/video/', src: ['*'], dest: '<%= config.dest %>/video/' }] }, misc: { files: [{ expand: true, cwd: '<%= config.source %>', src: [ '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 %>', browser: ["google chrome"], // tunnel: true, open: 'local', notify: false, ghostMode: { clicks: true, forms: true, scroll: true } } } }, 'sftp-deploy': { build: { auth: { host: 'markamoser.com', port: 6791, authKey: 'workhorse' }, cache: 'sftpCache.json', src: 'dist/', dest: 'www/markamoser/', progress: 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']); grunt.registerTask('deploy', ['buildProd', 'sftp-deploy:build']); };