Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'use strict';
- var LIVERELOAD_PORT = 35729;
- var lrSnippet = require('connect-livereload')({port: LIVERELOAD_PORT});
- var mountFolder = function (connect, dir) {
- return connect.static(require('path').resolve(dir));
- };
- // # Globbing
- // for performance reasons we're only matching one level down:
- // 'test/spec/{,*/}*.js'
- // use this if you want to match all subfolders:
- // 'test/spec/**/*.js'
- // templateFramework: 'lodash'
- module.exports = function (grunt) {
- // show elapsed time at the end
- require('time-grunt')(grunt);
- // load all grunt tasks
- require('load-grunt-tasks')(grunt);
- // configurable paths
- var yeomanConfig = {
- app: 'app',
- dist: 'dist'
- };
- grunt.initConfig({
- yeoman: yeomanConfig,
- watch: {
- options: {
- nospawn: true
- },
- 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']
- },
- livereload: {
- options: {
- livereload: LIVERELOAD_PORT
- },
- files: [
- '<%= yeoman.app %>/*.html',
- '{.tmp,<%= yeoman.app %>}/styles/{,*/}*.css',
- '{.tmp,<%= yeoman.app %>}/scripts/{,*/}*.js',
- '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp}',
- '<%= yeoman.app %>/scripts/templates/*.{ejs,mustache,hbs}'
- ]
- },
- jst: {
- files: [
- '<%= yeoman.app %>/scripts/templates/*.ejs'
- ],
- tasks: ['jst']
- }
- },
- connect: {
- options: {
- port: 9000,
- // change this to '0.0.0.0' to access the server from outside
- hostname: 'localhost'
- },
- livereload: {
- options: {
- middleware: function (connect) {
- return [
- lrSnippet,
- mountFolder(connect, '.tmp'),
- mountFolder(connect, yeomanConfig.app)
- ];
- }
- }
- },
- test: {
- options: {
- port: 9001,
- middleware: function (connect) {
- return [
- mountFolder(connect, '.tmp'),
- mountFolder(connect, 'test'),
- mountFolder(connect, yeomanConfig.app)
- ];
- }
- }
- },
- dist: {
- options: {
- middleware: function (connect) {
- return [
- mountFolder(connect, yeomanConfig.dist)
- ];
- }
- }
- }
- },
- open: {
- server: {
- path: 'http://localhost:<%= connect.options.port %>'
- }
- },
- clean: {
- dist: ['.tmp', '<%= yeoman.dist %>/*'],
- server: '.tmp'
- },
- jshint: {
- options: {
- jshintrc: '.jshintrc'
- },
- all: [
- 'Gruntfile.js',
- '<%= yeoman.app %>/scripts/{,*/}*.js',
- '!<%= yeoman.app %>/scripts/vendor/*',
- 'test/spec/{,*/}*.js'
- ]
- },
- mocha: {
- all: {
- options: {
- run: true,
- urls: ['http://localhost:<%= connect.options.port %>/index.html']
- }
- }
- },
- coffee: {
- dist: {
- files: [{
- // rather than compiling multiple files here you should
- // require them into your main .coffee file
- 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 %>/bower_components',
- relativeAssets: true
- },
- dist: {},
- server: {
- options: {
- debugInfo: true
- }
- }
- },
- // not enabled since usemin task does concat and uglify
- // check index.html to edit your build targets
- // enable this task if you prefer defining your build targets here
- /*uglify: {
- dist: {}
- },*/
- 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',
- dest: '<%= yeoman.dist %>'
- }]
- }
- },
- copy: {
- dist: {
- files: [{
- expand: true,
- dot: true,
- cwd: '<%= yeoman.app %>',
- dest: '<%= yeoman.dist %>',
- src: [
- '*.{ico,txt}',
- '.htaccess',
- 'images/{,*/}*.{webp,gif}',
- 'styles/fonts/{,*/}*.*'
- ]
- }]
- }
- },
- bower: {
- all: {
- rjsConfig: '<%= yeoman.app %>/scripts/main.js'
- }
- },
- jst: {
- compile: {
- files: {
- '.tmp/scripts/templates.js': ['<%= yeoman.app %>/scripts/templates/*.ejs']
- }
- }
- },
- rev: {
- dist: {
- files: {
- src: [
- '<%= yeoman.dist %>/scripts/{,*/}*.js',
- '<%= yeoman.dist %>/styles/{,*/}*.css',
- '<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp}',
- '/styles/fonts/{,*/}*.*'
- ]
- }
- }
- }
- });
- grunt.registerTask('createDefaultTemplate', function () {
- grunt.file.write('.tmp/scripts/templates.js', 'this.JST = this.JST || {};');
- });
- grunt.registerTask('server', function (target) {
- if (target === 'dist') {
- return grunt.task.run(['build', 'open', 'connect:dist:keepalive']);
- } else if (target === 'test') {
- return grunt.task.run([
- 'clean:server',
- 'coffee',
- 'createDefaultTemplate',
- 'jst',
- 'compass:server',
- 'connect:test:keepalive'
- ]);
- }
- grunt.task.run([
- 'clean:server',
- 'coffee:dist',
- 'createDefaultTemplate',
- 'jst',
- 'compass:server',
- 'connect:livereload',
- 'open',
- 'watch'
- ]);
- });
- grunt.registerTask('test', [
- 'clean:server',
- 'coffee',
- 'createDefaultTemplate',
- 'jst',
- 'compass',
- 'connect:test',
- 'mocha'
- ]);
- grunt.registerTask('build', [
- 'clean:dist',
- 'coffee',
- 'createDefaultTemplate',
- 'jst',
- 'compass:dist',
- 'useminPrepare',
- 'imagemin',
- 'htmlmin',
- 'concat',
- 'cssmin',
- 'uglify',
- 'copy',
- 'rev',
- 'usemin'
- ]);
- grunt.registerTask('default', [
- 'jshint',
- 'test',
- 'build'
- ]);
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement