Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'use strict';
- module.exports = function (grunt) {
- // Load grunt tasks automatically
- require('load-grunt-tasks')(grunt);
- // Time how long tasks take. Can help when optimizing build times
- require('time-grunt')(grunt);
- // Turn on the stack trace by default
- grunt.option('stack', true);
- // Define the configuration for all the tasks
- grunt.initConfig({
- // Read the package file
- pkg: grunt.file.readJSON('package.json'),
- // Project settings
- config: {
- // Configurable paths
- app: {
- root: 'app',
- scripts: '<%= config.app.root %>/scripts',
- styles: '<%= config.app.root %>/styles',
- templates: '<%= config.app.root %>/templates',
- snippets: '<%= config.app.root %>/snippets',
- img: '<%= config.app.root %>/images'
- },
- dist: {
- site: 'site',
- assets: 'assets',
- scripts: '<%= config.dist.assets %>/scripts',
- styles: '<%= config.dist.assets %>/styles',
- templates: '<%= config.dist.site %>/templates',
- snippets: '<%= config.dist.site %>/snippets',
- img: '<%= config.dist.assets %>/images'
- },
- localhost: 'http://craigmdennis.local'
- },
- banner: '/*\n' +
- 'Author: <%= pkg.author %>\n' +
- 'Twitter: <%= pkg.twitter %>\n' +
- 'Description: <%= pkg.description %>\n' +
- 'Version: <%= pkg.version %>\n' +
- '*/\n',
- // Watches files for changes and runs tasks based on the changed files
- watch: {
- jade: {
- files: ['<%= config.app.templates %>/*.jade', '<%= config.app.snippets %>/*.jade'],
- tasks: ['jadephp:server']
- },
- coffee: {
- files: ['<%= config.app.scripts %>/{,*/}*.{coffee,litcoffee,coffee.md}'],
- tasks: ['coffee', 'jshint:server']
- },
- js: {
- files: ['<%= config.app.scripts %>/{,*/}*.js'],
- tasks: ['newer:copy', 'jshint:server']
- },
- gruntfile: {
- files: ['Gruntfile.js'],
- tasks: ['jshint:gruntfile', 'default']
- },
- assets: {
- files: ['<%= config.app.img %>/{,*/}*.{webp,svg}', '<%= config.app.assets %>/fonts/{,*/}*.*'],
- tasks: ['newer:copy:dist']
- },
- sass: {
- files: ['<%= config.app.styles %>/{,*/}*.{scss,sass}'],
- tasks: ['sass', 'autoprefixer']
- },
- styles: {
- files: ['<%= config.app.styles %>/{,*/}*.css'],
- tasks: ['newer:copy:server', 'autoprefixer']
- },
- livereload: {
- options: {
- livereload: '<%= connect.options.livereload %>'
- },
- files: [
- 'content/**/*.{md,txt}',
- '<%= config.dist.templates %>/{,*/}*.php',
- '<%= config.dist.snippets %>/{,*/}*.php',
- '.tmp/styles/{,*/}*.css',
- '.tmp/scripts/{,*/}*.js',
- '<%= config.app.img %>/{,*/}*.*'
- ]
- }
- },
- // The actual grunt server settings
- connect: {
- options: {
- port: 9000,
- livereload: 35729,
- hostname: '0.0.0.0'
- },
- livereload: {
- options: {
- open: '<%= config.localhost %>',
- base: [
- '.tmp',
- '<%= config.app.root %>',
- '/'
- ]
- }
- },
- dist: {
- options: {
- open: '<%= config.localhost %>',
- base: '<%= config.dist.site %>',
- livereload: false
- }
- }
- },
- // Empties folders to start fresh
- clean: {
- dist: [
- '.tmp',
- '<%= config.dist.templates %>/*',
- '<%= config.dist.snippets %>/*',
- '<%= config.dist.assets %>'
- ],
- cache: [
- '<%= config.dist.site %>/cache/*'
- ]
- },
- // Compile Jade to HTML
- jadephp: {
- options: {
- pretty: true
- },
- // Compile templates straight to php in dist
- server: {
- files: [
- {
- expand: true,
- cwd: '<%= config.app.templates %>/',
- dest: '<%= config.dist.templates %>',
- src: '*.jade',
- ext: '.php'
- },{
- expand: true,
- cwd: '<%= config.app.snippets %>/',
- dest: '<%= config.dist.snippets %>',
- src: '*.jade',
- ext: '.php'
- }
- ]
- },
- // Compile templates to HTML in .tmp so we can run useminPrepare
- dist: {
- files: [
- {
- expand: true,
- cwd: '<%= config.app.templates %>/',
- dest: '.tmp/templates',
- src: '*.jade',
- ext: '.html'
- },{
- expand: true,
- cwd: '<%= config.app.snippets %>/',
- dest: '.tmp/snippets',
- src: '*.jade',
- ext: '.html'
- }
- ]
- },
- },
- // Make sure code styles are up to par and there are no obvious mistakes
- jshint: {
- options: {
- jshintrc: '.jshintrc',
- reporter: require('jshint-stylish')
- },
- gruntfile: {
- src: 'Gruntfile.js'
- },
- server: {
- options: {
- force: true
- },
- src: '.tmp/scripts/{,*/}.js'
- },
- dist: {
- src: '<%= jshint.server.src %>'
- }
- },
- // Compiles CoffeeScript to JavaScript
- coffee: {
- options: {
- sourceMap: false
- },
- dist: {
- files: [{
- expand: true,
- cwd: '<%= config.app.scripts %>/',
- src: '{,*/}*.{coffee,litcoffee,coffee.md}',
- dest: '.tmp/scripts',
- ext: '.js'
- }]
- },
- },
- // Compiles Sass to CSS and generates necessary files if requested
- sass: {
- options: {
- style: 'expanded',
- sourcemap: false,
- quiet: true
- },
- dist: {
- files: [{
- expand: true,
- cwd: '<%= config.app.styles %>/',
- src: '{,*/}*.scss',
- dest: '.tmp/styles',
- ext: '.css'
- }]
- }
- },
- // Add vendor prefixed styles
- autoprefixer: {
- options: {
- browsers: ['last 1 version']
- },
- dist: {
- files: [{
- expand: true,
- cwd: '.tmp/styles/',
- src: '{,*/}*.css',
- dest: '.tmp/styles/'
- }]
- }
- },
- // Automatically inject Bower components into the HTML file
- bowerInstall: {
- app: {
- src: ['<%= config.app.snippets %>/{,*/}*.jade'],
- ignorePath: '<%= config.app.root %>/'
- },
- sass: {
- src: ['<%= config.app.styles %>/{,*/}*.{scss,sass}'],
- ignorePath: '<%= config.app.root %>/bower_components/'
- }
- },
- // Reads HTML for usemin blocks to enable smart builds that automatically
- // concat, minify and revision files. Creates configurations in memory so
- // additional tasks can operate on them
- useminPrepare: {
- options: {
- dest: '<%= config.dist.assets %>'
- },
- html: ['.tmp/templates/{,*/}*.html', '.tmp/snippets/{,*/}*.html']
- },
- // Performs rewrites based on rev and the useminPrepare configuration
- usemin: {
- options: {
- assetDirs: '<%= config.dist.assets %>',
- basedir: '',
- dirs: '<%= config.app.root %>'
- },
- html: ['.tmp/templates/{,*/}*.html', '.tmp/snippets/{,*/}*.html'],
- css: '.tmp/styles/{,*/}*.css'
- },
- // The following *-min tasks produce minified files in the dist folder
- imagemin: {
- dist: {
- files: [{
- expand: true,
- cwd: '<%= config.app.img %>/',
- src: '{,*/}*.{gif,jpeg,jpg,png}',
- dest: '<%= config.dist.img %>'
- }]
- }
- },
- uglify: {
- options: {
- sourceMap: false
- }
- },
- cssmin: {
- options: {
- banner: '<%= banner %>',
- keepSpecialComments: false,
- report: 'min'
- }
- },
- // Copies remaining files to places other tasks can use
- copy: {
- server: {
- files: [
- {
- // Copy any .css files to the temp directory
- expand: true,
- dot: true,
- cwd: '<%= config.app.styles %>/',
- dest: '.tmp/styles/',
- src: '{,*/}*.css'
- },
- {
- // Copy any js files to the temp directory
- expand: true,
- dot: true,
- cwd: '<%= config.app.scripts %>/',
- dest: '.tmp/scripts/',
- src: '{,*/}*.js'
- },
- {
- // Copy any important top-level files to the temp directory
- expand: true,
- dot: true,
- cwd: '<%= config.app.root %>/',
- dest: '<%= config.dist.site %>',
- src: [
- '*.{ico,png,txt,svg}',
- '.htaccess',
- '*.php',
- ]
- }
- ]
- },
- dist: {
- files: [
- {
- // Copy files that aren't compressed with imagemin
- expand: true,
- dot: true,
- cwd: '<%= config.app.root %>/',
- dest: '<%= config.dist.assets %>',
- src: [
- 'images/{,*/}*.{webp,svg}',
- 'fonts/{,*/}*.*'
- ]
- },
- {
- // Copy HTML tempaltes and convert them to php
- expand: true,
- dot: true,
- cwd: '.tmp/templates',
- dest: '<%= config.dist.templates %>',
- src: '*.html',
- ext: '.php'
- },
- {
- // Copy HTML snippets and convert them to php
- expand: true,
- dot: true,
- cwd: '.tmp/snippets',
- dest: '<%= config.dist.snippets %>',
- src: '*.html',
- ext: '.php'
- },
- {
- src: '<%= config.app.root %>/bower_components/jquery/dist/jquery.min.js',
- dest: '<%= config.dist.scripts %>/vendor/jquery-1.11.1.min.js'
- }
- ]
- }
- },
- // Renames files for browser caching purposes
- rev: {
- dist: {
- files: {
- src: [
- '<%= config.dist.scripts %>/{,*/}*.js',
- '<%= config.dist.styles %>/{,*/}*.css',
- '<%= config.dist %>/fonts/{,*/}*.*',
- '<%= config.dist %>/*.{ico,png}',
- // Don't rev images until I can figure out how to support CDN
- '!<%= config.dist.img %>/{,*/}*.*'
- ]
- }
- }
- },
- // Generates a custom Modernizr build that includes only the tests you
- // reference in your app
- modernizr: {
- dist: {
- devFile: '<%= config.app.root %>/bower_components/modernizr/modernizr.js',
- outputFile: '<%= config.dist.scripts %>/vendor/modernizr-custom.js',
- files: {
- src: [
- '<%= config.dist.scripts %>/*.js',
- '<%= config.dist.styles %>/{,*/}*.css'
- ]
- },
- matchCommunityTests: true,
- uglify: true,
- extra: {
- shiv: false,
- load: false
- }
- }
- },
- bump: {
- options: {
- files: ['package.json', 'bower.json'],
- push: true,
- pushTo: 'origin',
- createTag: true,
- tagName: 'v%VERSION%',
- tagMessage: 'Version %VERSION%',
- commitFiles: ['<%= bump.options.files %>', 'CHANGELOG.md'],
- commitMessage: 'Bumped version to v%VERSION%'
- }
- },
- changelog: {
- options: {
- editor: 'sublime -w'
- }
- },
- // Run some tasks in parallel to speed up build process
- concurrent: {
- options: {
- logConcurrentOutput: true,
- limit: 5
- },
- server: [
- 'newer:sass',
- 'newer:jadephp:server',
- 'newer:coffee',
- 'newer:copy',
- ],
- dist: [
- 'jadephp:dist',
- 'sass',
- 'coffee',
- 'copy:server',
- 'imagemin'
- ]
- }
- });
- grunt.registerTask('default', [
- 'clean',
- 'concurrent:server',
- 'autoprefixer',
- ]);
- grunt.registerTask('serve', [
- 'default',
- 'connect:livereload',
- 'watch'
- ]);
- grunt.registerTask('build', [
- 'clean',
- 'concurrent:dist',
- 'useminPrepare',
- 'jshint',
- 'autoprefixer',
- 'concat',
- 'uglify',
- 'cssmin',
- 'modernizr',
- // 'rev',
- 'usemin',
- 'copy:dist',
- 'connect:dist'
- ]);
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement