Gruntfile.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. module.exports = function (grunt) {
  2. grunt.initConfig({
  3. pkg: grunt.file.readJSON('package.json'),
  4. cfg: {
  5. filename: 'easypiechart',
  6. vanillaExportName: 'EasyPieChart'
  7. },
  8. dirs: {
  9. tmp: 'tmp',
  10. src: 'src',
  11. dest: 'dist',
  12. docs: 'docs',
  13. test: 'test',
  14. demo: 'demo'
  15. },
  16. clean: {
  17. all: ['<%= dirs.dest %>/', '<%= dirs.tmp %>/'],
  18. tmp: ['<%= dirs.tmp %>/'],
  19. meteor: ['.build.*', 'versions.json']
  20. },
  21. concat: {
  22. vanilla: {
  23. src: [
  24. '<%= dirs.src %>/renderer/canvas.js',
  25. '<%= dirs.src %>/<%= cfg.filename %>.js'
  26. ],
  27. dest: '<%= dirs.tmp %>/<%= cfg.filename %>.js'
  28. },
  29. jquery: {
  30. src: [
  31. '<%= dirs.src %>/renderer/canvas.js',
  32. '<%= dirs.src %>/<%= cfg.filename %>.js',
  33. '<%= dirs.src %>/jquery.plugin.js'
  34. ],
  35. dest: '<%= dirs.tmp %>/jquery.<%= cfg.filename %>.js'
  36. },
  37. angular: {
  38. src: [
  39. '<%= dirs.src %>/angular.directive.js',
  40. '<%= dirs.src %>/renderer/canvas.js',
  41. '<%= dirs.src %>/<%= cfg.filename %>.js'
  42. ],
  43. dest: '<%= dirs.tmp %>/angular.<%= cfg.filename %>.js'
  44. }
  45. },
  46. usebanner: {
  47. options: {
  48. position: 'top',
  49. banner: '/**!\n' +
  50. ' * <%= pkg.name %>\n' +
  51. ' * <%= pkg.description %>\n' +
  52. ' *\n' +
  53. ' * @license <%= pkg.license %>\n' +
  54. ' * @author <%= pkg.author.name %> <<%= pkg.author.email %>> (<%= pkg.author.url %>)\n' +
  55. ' * @version <%= pkg.version %>\n' +
  56. ' **/\n'
  57. },
  58. files: {
  59. src: [
  60. '<%= dirs.dest %>/<%= cfg.filename %>.js',
  61. '<%= dirs.dest %>/jquery.<%= cfg.filename %>.js',
  62. '<%= dirs.dest %>/angular.<%= cfg.filename %>.js'
  63. ]
  64. }
  65. },
  66. uglify: {
  67. dist: {
  68. options: {
  69. report: 'gzip',
  70. preserveComments: 'some'
  71. },
  72. files: {
  73. 'dist/<%= cfg.filename %>.min.js': ['dist/<%= cfg.filename %>.js'],
  74. 'dist/jquery.<%= cfg.filename %>.min.js': ['dist/jquery.<%= cfg.filename %>.js'],
  75. 'dist/angular.<%= cfg.filename %>.min.js': ['dist/angular.<%= cfg.filename %>.js']
  76. }
  77. }
  78. },
  79. watch: {
  80. gruntfile: {
  81. files: ['Gruntfile.js']
  82. },
  83. scripts: {
  84. files: '<%= dirs.src %>/**/*.js',
  85. tasks: ['default'],
  86. options: {
  87. debounceDelay: 250
  88. }
  89. },
  90. less: {
  91. files: '<%= dirs.demo %>/*.less',
  92. tasks: ['less'],
  93. options: {
  94. debounceDelay: 250
  95. }
  96. },
  97. readme: {
  98. files: '<%= dirs.docs %>/**/*.md',
  99. tasks: ['readme'],
  100. options: {
  101. debounceDelay: 250
  102. }
  103. }
  104. },
  105. jshint: {
  106. files: [
  107. '<%= dirs.src %>/**/*.js',
  108. '<%= dirs.test %>/**/*.js'
  109. ],
  110. options: {}
  111. },
  112. karma: {
  113. unit: {
  114. configFile: 'karma.conf.coffee'
  115. },
  116. ci: {
  117. configFile: 'karma.conf.coffee',
  118. singleRun: true,
  119. browsers: ['PhantomJS']
  120. }
  121. },
  122. less: {
  123. demo: {
  124. files: {
  125. '<%= dirs.demo %>/style.css': ['<%= dirs.demo %>/style.less']
  126. }
  127. }
  128. },
  129. umd: {
  130. vanilla: {
  131. src: '<%= dirs.tmp %>/<%= cfg.filename %>.js',
  132. dest: '<%= dirs.dest %>/<%= cfg.filename %>.js',
  133. objectToExport: '<%= cfg.vanillaExportName %>',
  134. globalAlias: '<%= cfg.vanillaExportName %>'
  135. },
  136. jquery: {
  137. src: '<%= dirs.tmp %>/jquery.<%= cfg.filename %>.js',
  138. dest: '<%= dirs.dest %>/jquery.<%= cfg.filename %>.js',
  139. deps: {
  140. 'default': ['$'],
  141. amd: ['jquery'],
  142. cjs: ['jquery'],
  143. global: ['jQuery']
  144. }
  145. },
  146. angular: {
  147. src: '<%= dirs.tmp %>/angular.<%= cfg.filename %>.js',
  148. dest: '<%= dirs.dest %>/angular.<%= cfg.filename %>.js',
  149. deps: {
  150. 'default': ['angular'],
  151. amd: ['angular'],
  152. cjs: ['angular'],
  153. global: ['angular']
  154. }
  155. }
  156. },
  157. exec: {
  158. 'meteor-init': {
  159. command: [
  160. 'type meteor >/dev/null 2>&1 || { curl https://install.meteor.com/ | sh; }'
  161. ].join(';')
  162. },
  163. 'meteor-publish': {
  164. command: 'meteor publish'
  165. }
  166. }
  167. });
  168. // load all installed grunt tasks
  169. require('load-grunt-tasks')(grunt);
  170. grunt.loadNpmTasks('grunt-exec');
  171. // task defiinitions
  172. grunt.registerTask('default', [
  173. 'clean:all',
  174. 'jshint',
  175. 'concat',
  176. 'umd',
  177. 'usebanner',
  178. 'uglify',
  179. 'clean:tmp',
  180. 'readme'
  181. ]);
  182. grunt.registerTask('test', ['karma:unit']);
  183. grunt.registerTask('all', ['default', 'less']);
  184. grunt.registerTask('meteor-publish', ['exec:meteor-init', 'exec:meteor-publish', 'exec:meteor-cleanup']);
  185. grunt.registerTask('meteor', ['exec:meteor-init', 'exec:meteor-publish', 'exec:meteor-cleanup']);
  186. };