Gruntfile.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. module.exports = function (grunt) {
  2. 'use strict';
  3. require('load-grunt-tasks')(grunt);
  4. var _ = require('lodash');
  5. var karmaConfig = function(configFile, customOptions) {
  6. var options = { configFile: configFile, keepalive: true };
  7. var travisOptions = process.env.TRAVIS && { browsers: ['Firefox'], reporters: 'dots' };
  8. return _.extend(options, customOptions, travisOptions);
  9. };
  10. var mountFolder = function (connect, dir) {
  11. return connect.static(require('path').resolve(dir));
  12. };
  13. grunt.initConfig({
  14. pkg: grunt.file.readJSON('bower.json'),
  15. meta: {
  16. banner: '/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - ' +
  17. '<%= grunt.template.today("yyyy-mm-dd") %>\n' +
  18. '<%= pkg.homepage ? "* " + pkg.homepage + "\n" : "" %>' +
  19. '* Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>;' +
  20. ' Licensed <%= _.pluck(pkg.licenses, "type").join(", ") %> */'
  21. },
  22. watch: {
  23. scripts: {
  24. files: ['Gruntfile.js', 'src/**/*.js', 'test/**/*.js'],
  25. tasks: ['jshint', 'karma:unit']
  26. }
  27. },
  28. jshint: {
  29. all: ['Gruntfile.js', 'src/**/*.js', 'test/**/*.js'],
  30. options: {
  31. eqeqeq: true,
  32. globals: {
  33. angular: true
  34. }
  35. }
  36. },
  37. concat: {
  38. js: {
  39. src: ['src/**/*main.js',
  40. 'src/**/*.js'],
  41. dest: 'dist/angular-multi-select-tree-<%= pkg.version %>.js'
  42. },
  43. css: {
  44. src: ['src/**/*.css', 'src/**/*.less'],
  45. dest: 'dist/angular-multi-select-tree-<%= pkg.version %>.css'
  46. }
  47. },
  48. ngtemplates: {
  49. 'multi-select-tree': {
  50. src: 'src/**/*.html',
  51. dest: 'dist/angular-multi-select-tree-<%= pkg.version %>.tpl.js'
  52. }
  53. },
  54. uglify: {
  55. src: {
  56. files: {
  57. 'dist/angular-multi-select-tree-<%= pkg.version %>.min.js': '<%= concat.js.dest %>'
  58. }
  59. }
  60. },
  61. // connect
  62. connect: {
  63. options: {
  64. port: 3000,
  65. livereload: 93729,
  66. hostname: '0.0.0.0'
  67. },
  68. demo: {
  69. options: {
  70. middleware: function (connect) {
  71. return [
  72. mountFolder(connect, '')
  73. ];
  74. }
  75. }
  76. }
  77. },
  78. // open
  79. open: {
  80. server: {
  81. path: 'http://localhost:<%= connect.options.port %>/demo/'
  82. }
  83. },
  84. karma: {
  85. unit: {
  86. options: karmaConfig('karma.conf.js', {
  87. singleRun: true
  88. })
  89. },
  90. server: {
  91. options: karmaConfig('karma.conf.js', {
  92. singleRun: false
  93. })
  94. }
  95. },
  96. changelog: {
  97. options: {
  98. dest: 'CHANGELOG.md'
  99. }
  100. },
  101. ngmin: {
  102. src: {
  103. src: '<%= concat.js.dest %>',
  104. dest: '<%= concat.js.dest %>'
  105. }
  106. },
  107. cssmin: {
  108. css: {
  109. src: '<%= concat.css.dest %>',
  110. dest: 'dist/angular-multi-select-tree-<%= pkg.version %>.min.css'
  111. }
  112. },
  113. clean: ['dist/*']
  114. });
  115. grunt.registerTask('default', ['jshint', 'karma:unit']);
  116. grunt.registerTask('test', ['karma:unit']);
  117. grunt.registerTask('test-server', ['karma:server']);
  118. grunt.registerTask('server', ['open', 'connect:demo', 'watch']);
  119. grunt.registerTask('build', ['clean', 'jshint', 'concat', 'ngtemplates', 'ngmin', 'cssmin', 'uglify']);
  120. };