module.exports = function (grunt) {
var paths = {
dist: 'dist',
- tmp: '.tmp',
jade: 'views/**/**/*.jade',
css: 'public/stylesheets/*.css',
+ scss: 'public/stylesheets/application.scss',
vendor: 'public/stylesheets/vendor',
js: 'public/javascripts/*.js',
- src: 'src/*.js',
- routes: 'routes/**/*.js',
+ routes: 'controllers/**/*.js',
main: './server.js',
browserified: 'public/javascripts/bundle.js',
img: 'public/images/*.{png,jpg,jpeg,gif,webp,svg}',
browserifyOptions: { 'debug': true },
watch: true
}
- },
- dist: {
- src: [ paths.js ],
- dest: paths.browserified
}
},
+ concurrent: {
+ options: {
+ logConcurrentOutput: true
+ },
+ dev: [ 'watch:livereload', 'watch:sass', 'express:dev' ]
+ },
copy: {
dev: {
- cwd: 'node_modules/bootstrap/dist/',
- src: [ 'css/*', 'fonts/*' ],
+ cwd: 'node_modules/bootstrap-sass/assets/',
+ src: [ 'fonts/bootstrap/*' ],
expand: true,
dest: paths.vendor
}
files: [{
dot: true,
src: [
- paths.browserified
- ]
- }]
- },
- dist: {
- files: [{
- dot: true,
- src: [
- paths.tmp,
- paths.browserified,
- '<%= paths.dist %>/*',
- '!<%= paths.dist %>/.git*'
+ paths.browserified, 'public/stylesheets/global.css', paths.vendor
]
}]
}
},
- csslint: {
- options: {
- csslintrc: '.csslintrc'
- },
- src: paths.css
- },
express: {
dev: {
options: {
port: 9000,
node_env: 'development',
debug: true,
- background: true
- }
- },
- test: {
- options: {
- script: paths.server,
- harmony: true,
- port: 9000,
- node_env: 'test',
- background: true,
- debug: false
- }
- },
- prod: {
- options: {
- script: paths.server,
- harmony: true,
- port: 9000,
- node_env: 'production',
- background: false,
- debug: false
+ background: false
}
}
},
- filerev: {
+ sass: {
options: {
- copy: false
+ includePaths: [ 'node_modules/bootstrap-sass/assets/stylesheets/' ]
},
- dist: {
- cwd: 'dist',
- src: [ paths.js, paths.css, paths.img ],
- dest: 'dist',
- expand: true
- }
- },
- htmlmin: {
- dist: {
- options: {
- removeComments: true,
- collapseWhitespace: true
- },
- files: [ {
- expand: true,
- src: [ '<%= paths.dist %>/views/**/**/*.html' ]
- } ]
- }
- },
- imagemin: {
- dist: {
- files: [{
- expand: true,
- cwd: './public/images',
- src: '*.{png,jpg,jpeg}',
- dest: '<%= paths.dist %>/public/images'
- }]
- }
- },
- jade: {
- dist: {
- options: {
- pretty: true
- },
- files: [ {
- src: '**/*.jade',
- dest: '<%= paths.dist %>/views',
- ext: '.html',
- cwd: './views',
- expand: true
- } ]
- }
- },
- jshint: {
- all: {
- src: paths.js,
- options: {
- jshintrc: true
+ dev: {
+ files: {
+ 'public/stylesheets/global.css': paths.scss
}
}
},
- usemin: {
- html: [ '<%= paths.dist %>/views/**/**/*.html' ],
- css: [ '<%= paths.dist %>/public/stylesheets/*.css' ],
- options: {
- assetsDirs: [ '<%= paths.dist %>/public' ]
- }
- },
- useminPrepare: {
- html: '<%= paths.dist %>/views/index.html',
- options: {
- root: 'public',
- dest: '<%= paths.dist %>/public'
- }
- },
watch: {
- express: {
- files: [ paths.main, paths.routes, paths.src ],
- tasks: [ 'express:dev' ],
- options: {
- livereload: true,
- spawn: false
- }
- },
- dev: {
+ livereload: {
files: [ paths.jade, paths.css, paths.browserified ],
+ tasks: [ ],
options: {
- livereload: true,
- nospawn: false
+ livereload: true
}
+ },
+ sass: {
+ files: [ paths.scss ],
+ tasks: [ 'sass:dev' ]
}
}
})
- // Build client javascript and copy bootstrap dependencies
- grunt.registerTask('build', [], function () {
- grunt.loadNpmTasks('grunt-browserify')
- grunt.loadNpmTasks('grunt-contrib-copy')
- grunt.loadNpmTasks('grunt-newer')
+ // Load automatically all the tasks
+ require('load-grunt-tasks')(grunt)
- grunt.task.run(
- 'newer:browserify:dev',
- 'newer:copy:dev'
- )
- })
+ // Build client javascript and copy bootstrap dependencies
+ grunt.registerTask('build', [ 'sass:dev', 'newer:browserify:dev', 'newer:copy:dev' ])
// Start in dev mode (reload front end files without refresh)
- grunt.registerTask('dev', [], function () {
- grunt.loadNpmTasks('grunt-browserify')
- grunt.loadNpmTasks('grunt-contrib-watch')
- grunt.loadNpmTasks('grunt-express-server')
- grunt.loadNpmTasks('grunt-contrib-copy')
- grunt.loadNpmTasks('grunt-newer')
-
- grunt.task.run(
- 'newer:browserify:dev',
- 'newer:copy:dev',
- 'express:dev',
- 'watch'
- )
- })
-
- // TODO
- // Build dist directory for production
+ grunt.registerTask('dev', [ 'sass:dev', 'newer:browserify:dev', 'newer:copy:dev', 'concurrent:dev' ])
// Clean build
grunt.registerTask('clean', [], function () {
grunt.loadNpmTasks('grunt-contrib-clean')
grunt.task.run(
- 'clean:dist'
+ 'clean:dev'
)
})
}