Grunt: Yeoman + Angular + Express + Compass
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
module.exports = function (grunt) { | |
// load all grunt tasks | |
require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks); | |
// configurable paths | |
var yeomanConfig = { | |
app: 'app', | |
dist: 'dist' | |
}; | |
try { | |
yeomanConfig.app = require('./component.json').appPath || yeomanConfig.app; | |
} catch (e) { | |
} | |
grunt.initConfig({ | |
yeoman: yeomanConfig, | |
express: { | |
options: { | |
port: process.env.PORT || 9000 | |
}, | |
dev: { | |
options: { | |
script: 'server.js' | |
} | |
}, | |
prod: { | |
options: { | |
script: 'server.js' | |
} | |
} | |
}, | |
watch: { | |
coffee: { | |
files: ['<%= yeoman.app %>/scripts/{,*/}*.coffee'], | |
tasks: ['coffee:dist'] | |
}, | |
coffeeTest: { | |
files: ['test/spec/{,*/}*.coffee'], | |
tasks: ['coffee:test'] | |
}, | |
compass: { | |
files: ['<%= yeoman.app %>/styles/{,*/}*.{scss,sass}'], | |
tasks: ['compass'] | |
}, | |
express: { | |
files: [ | |
'<%= yeoman.app %>/{,*//*}*.html', | |
'{.tmp,<%= yeoman.app %>}/styles/{,*//*}*.css', | |
'{.tmp,<%= yeoman.app %>}/scripts/{,*//*}*.js', | |
'<%= yeoman.app %>/images/{,*//*}*.{png,jpg,jpeg,gif,webp,svg}', | |
'server.js', | |
'server/{,*//*}*.{js,json}' | |
], | |
tasks: ['express:dev'], | |
options: { | |
livereload: true, | |
nospawn: true //Without this option specified express won't be reloaded | |
} | |
} | |
}, | |
open: { | |
server: { | |
url: 'http://localhost:<%= express.options.port %>' | |
} | |
}, | |
clean: { | |
dist: { | |
files: [ | |
{ | |
dot: true, | |
src: [ | |
'.tmp', | |
'<%= yeoman.dist %>/*', | |
'!<%= yeoman.dist %>/.git*' | |
] | |
} | |
] | |
}, | |
server: '.tmp' | |
}, | |
jshint: { | |
options: { | |
jshintrc: '.jshintrc' | |
}, | |
all: [ | |
'Gruntfile.js', | |
'<%= yeoman.app %>/scripts/{,*/}*.js' | |
] | |
}, | |
karma: { | |
unit: { | |
configFile: 'karma.conf.js', | |
singleRun: true | |
} | |
}, | |
coffee: { | |
dist: { | |
files: [ | |
{ | |
expand: true, | |
cwd: '<%= yeoman.app %>/scripts', | |
src: '{,*/}*.coffee', | |
dest: '.tmp/scripts', | |
ext: '.js' | |
} | |
] | |
}, | |
test: { | |
files: [ | |
{ | |
expand: true, | |
cwd: 'test/spec', | |
src: '{,*/}*.coffee', | |
dest: '.tmp/spec', | |
ext: '.js' | |
} | |
] | |
} | |
}, | |
compass: { | |
options: { | |
sassDir: '<%= yeoman.app %>/styles', | |
cssDir: '.tmp/styles', | |
imagesDir: '<%= yeoman.app %>/images', | |
javascriptsDir: '<%= yeoman.app %>/scripts', | |
fontsDir: '<%= yeoman.app %>/styles/fonts', | |
importPath: '<%= yeoman.app %>/components', | |
relativeAssets: true | |
}, | |
dist: {}, | |
server: { | |
options: { | |
debugInfo: true | |
} | |
} | |
}, | |
concat: { | |
dist: { | |
files: { | |
'<%= yeoman.dist %>/scripts/scripts.js': [ | |
'.tmp/scripts/{,*/}*.js', | |
'<%= yeoman.app %>/scripts/{,*/}*.js' | |
] | |
} | |
} | |
}, | |
useminPrepare: { | |
html: '<%= yeoman.app %>/index.html', | |
options: { | |
dest: '<%= yeoman.dist %>' | |
} | |
}, | |
usemin: { | |
html: ['<%= yeoman.dist %>/{,*/}*.html'], | |
css: ['<%= yeoman.dist %>/styles/{,*/}*.css'], | |
options: { | |
dirs: ['<%= yeoman.dist %>'] | |
} | |
}, | |
imagemin: { | |
dist: { | |
files: [ | |
{ | |
expand: true, | |
cwd: '<%= yeoman.app %>/images', | |
src: '{,*/}*.{png,jpg,jpeg}', | |
dest: '<%= yeoman.dist %>/images' | |
} | |
] | |
} | |
}, | |
cssmin: { | |
dist: { | |
files: { | |
'<%= yeoman.dist %>/styles/main.css': [ | |
'.tmp/styles/{,*/}*.css', | |
'<%= yeoman.app %>/styles/{,*/}*.css' | |
] | |
} | |
} | |
}, | |
htmlmin: { | |
dist: { | |
options: { | |
/*removeCommentsFromCDATA: true, | |
// https://github.com/yeoman/grunt-usemin/issues/44 | |
//collapseWhitespace: true, | |
collapseBooleanAttributes: true, | |
removeAttributeQuotes: true, | |
removeRedundantAttributes: true, | |
useShortDoctype: true, | |
removeEmptyAttributes: true, | |
removeOptionalTags: true*/ | |
}, | |
files: [ | |
{ | |
expand: true, | |
cwd: '<%= yeoman.app %>', | |
src: ['*.html', 'views/*.html'], | |
dest: '<%= yeoman.dist %>' | |
} | |
] | |
} | |
}, | |
cdnify: { | |
dist: { | |
html: ['<%= yeoman.dist %>/*.html'] | |
} | |
}, | |
ngmin: { | |
dist: { | |
files: [ | |
{ | |
expand: true, | |
cwd: '<%= yeoman.dist %>/scripts', | |
src: '*.js', | |
dest: '<%= yeoman.dist %>/scripts' | |
} | |
] | |
} | |
}, | |
uglify: { | |
dist: { | |
files: { | |
'<%= yeoman.dist %>/scripts/scripts.js': [ | |
'<%= yeoman.dist %>/scripts/scripts.js' | |
] | |
} | |
} | |
}, | |
rev: { | |
dist: { | |
files: { | |
src: [ | |
'<%= yeoman.dist %>/scripts/{,*/}*.js', | |
'<%= yeoman.dist %>/styles/{,*/}*.css', | |
'<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}', | |
'<%= yeoman.dist %>/styles/fonts/*' | |
] | |
} | |
} | |
}, | |
copy: { | |
dist: { | |
files: [ | |
{ | |
expand: true, | |
dot: true, | |
cwd: '<%= yeoman.app %>', | |
dest: '<%= yeoman.dist %>', | |
src: [ | |
'*.{ico,txt}', | |
'.htaccess', | |
'components/**/*', | |
'images/{,*/}*.{gif,webp}', | |
'styles/fonts/*' | |
] | |
} | |
] | |
} | |
} | |
}); | |
grunt.registerTask('server', [ | |
'clean:server', | |
'coffee:dist', | |
'compass:server', | |
'express:dev', | |
'open', | |
'watch' | |
]); | |
grunt.registerTask('test', [ | |
'clean:server', | |
'coffee', | |
'compass', | |
'karma' | |
]); | |
grunt.registerTask('build', [ | |
'clean:dist', | |
'jshint', | |
'test', | |
'coffee', | |
'compass:dist', | |
'useminPrepare', | |
'imagemin', | |
'cssmin', | |
'htmlmin', | |
'concat', | |
'copy', | |
'cdnify', | |
'ngmin', | |
'uglify', | |
'rev', | |
'usemin' | |
]); | |
grunt.registerTask('default', ['build']); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment