194 lines
4.4 KiB
JavaScript
194 lines
4.4 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: ['{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']);
|
|
};
|