rafaelcamargo/dollert

View on GitHub
gruntfile.js

Summary

Maintainability
A
1 hr
Test Coverage
var pathLibs = 'node_modules/';
var pathSrc = 'src/';
var pathDist = 'dist/';
var pathSpec = 'spec/';
var pathImages = pathSrc + 'img/';
var pathScripts = pathSrc + 'js/';
var pathStyles = pathSrc + 'styl/';
var pathTemplates = pathSrc + 'jade/';
var pathLocales = pathTemplates + 'locales/';
var pathMonitoring = pathScripts + 'monitoring/';
var libFiles = pathLibs + '**/*.min.js';
var styleFiles = pathStyles + '**/*.styl';
var scriptFiles = pathScripts + '**/*.js';
var templateFiles = pathTemplates + '**/*.jade';
var imageFiles = pathImages + '**/*';
var specFiles = pathSpec + '**/*-spec.js';
var manifestFile = pathSrc + 'manifest.json';
var distFiles = pathDist + '**/*.*';
var configFiles = [
  'package.json',
  'gruntfile.js',
  'karma.conf.js'
];

var config = {

  stylus: {
    compile: {
      files: {
        'dist/popup.min.css': styleFiles
      }
    }
  },

  cssmin: {
    target: {
      files: {
        'dist/popup.min.css': pathDist + 'popup.min.css'
      }
    }
  },

  copy :{
    images: {
      files: [
        {
          expand: true,
          flatten: true,
          cwd: pathImages,
          src: '*.*',
          dest: pathDist
        }
      ]
    },
    manifest: {
      files: [
        {
          expand: true,
          flatten: true,
          src: manifestFile,
          dest: pathDist
        }
      ]
    }
  },

  jade: {
    pages: {
      files: {
        'dist/popup.html': pathTemplates + 'popup.jade'
      }
    }
  },

  uglify: {
    options: {
      mangle: false
    },
    dollert: {
      files : {
        'dist/popup.min.js': pathDist + 'popup.min.js',
        'dist/background.min.js': pathDist + 'background.min.js'
      }
    }
  },

  concat_in_order: {
    dist : {
      files : {
        'dist/popup.min.js': [
          pathLibs + 'jquery/dist/jquery.min.js',
          pathScripts + 'chrome-service.js',
          pathScripts + 'currency-service.js',
          pathScripts + 'popup.js'
        ],
        'dist/background.min.js': [
          pathLibs + 'jquery/dist/jquery.min.js',
          pathScripts + 'chrome-service.js',
          pathScripts + 'currency-service.js',
          pathScripts + 'notifier-service.js'
        ]
      }
    }
  },

  jshint: {
    conf: configFiles,
    dist: scriptFiles,
    spec: specFiles
  },

  karma: {
    unit: {
      configFile: 'karma.conf.js'
    }
  },

  watch: {
    styles: {
      files: styleFiles,
      tasks: ['stylus','cssmin']
    },
    dist: {
      files: scriptFiles,
      tasks: [
        'jshint:dist',
        'concat_in_order:dist'
      ]
    },
    images: {
      files: imageFiles,
      tasks: ['copy:images']
    },
    templates: {
      files: templateFiles,
      tasks: ['jade']
    },
    spec: {
      files: specFiles,
      tasks: ['karma']
    },
    conf: {
      files: configFiles,
      tasks: ['jshint:conf']
    },
    manifest: {
      files: manifestFile,
      tasks: ['copy:manifest']
    }
  },

  exec: {
    setupDeploy: 'node ./setup-deploy'
  },

  zip: {
    './dist.zip': distFiles
  }

};

module.exports = function(grunt) {

  grunt.initConfig(config);

  grunt.loadNpmTasks('grunt-contrib-stylus');
  grunt.loadNpmTasks('grunt-contrib-cssmin');
  grunt.loadNpmTasks('grunt-contrib-copy');
  grunt.loadNpmTasks('grunt-contrib-uglify');
  grunt.loadNpmTasks('grunt-concat-in-order');
  grunt.loadNpmTasks('grunt-contrib-jshint');
  grunt.loadNpmTasks('grunt-contrib-jade');
  grunt.loadNpmTasks('grunt-karma');
  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.loadNpmTasks('grunt-exec');
  grunt.loadNpmTasks('grunt-zip');

  grunt.registerTask('build', [
    'stylus',
    'copy',
    'concat_in_order',
    'jshint',
    'jade',
    'karma'
  ]);

  grunt.registerTask('start', [
    'build',
    'watch'
  ]);

  grunt.registerTask('deploy', [
    'exec:setupDeploy',
    'build',
    'cssmin',
    'uglify',
    'zip'
  ]);

};