Gruntfile.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. 'use strict';
  2. module.exports = function(grunt) {
  3. // Project configuration.
  4. grunt.initConfig({
  5. // Metadata.
  6. pkg: grunt.file.readJSON('smoove.jquery.json'),
  7. banner: '/*!\n' +
  8. '* jQuery Smoove v<%= pkg.version %> (<%= pkg.homepage %>)\n' +
  9. '* Copyright (c) <%= grunt.template.today("yyyy") %> Adam Bouqdib\n' +
  10. '* Licensed under <%= pkg.licenses[0].type %> (<%= pkg.licenses[0].url %>) \n*/\n\n',
  11. // Task configuration.
  12. clean: {
  13. files: ['dist']
  14. },
  15. concat: {
  16. options: {
  17. banner: '<%= banner %>',
  18. stripBanners: true
  19. },
  20. dist: {
  21. src: ['src/jquery.<%= pkg.name %>.js'],
  22. dest: 'dist/jquery.<%= pkg.name %>.js'
  23. },
  24. },
  25. uglify: {
  26. options: {
  27. banner: '<%= banner %>'
  28. },
  29. dist: {
  30. src: '<%= concat.dist.dest %>',
  31. dest: 'dist/jquery.<%= pkg.name %>.min.js'
  32. },
  33. },
  34. connect: {
  35. server: {
  36. options: {
  37. port: 8085
  38. }
  39. }
  40. },
  41. qunit: {
  42. files: ['test/**/*.html'],
  43. options: {
  44. page: {
  45. viewportSize: {
  46. width: 1024,
  47. height: 768
  48. }
  49. }
  50. }
  51. },
  52. jshint: {
  53. options: {
  54. jshintrc: true
  55. },
  56. gruntfile: {
  57. src: 'Gruntfile.js'
  58. },
  59. src: {
  60. src: ['src/**/*.js']
  61. },
  62. test: {
  63. src: ['test/**/*.js']
  64. },
  65. },
  66. watch: {
  67. gruntfile: {
  68. files: '<%= jshint.gruntfile.src %>',
  69. tasks: ['jshint:gruntfile']
  70. },
  71. src: {
  72. files: '<%= jshint.src.src %>',
  73. tasks: ['jshint:src', 'qunit']
  74. },
  75. test: {
  76. files: '<%= jshint.test.src %>',
  77. tasks: ['jshint:test', 'qunit']
  78. },
  79. },
  80. updatejson: {
  81. options: {
  82. src: 'smoove.jquery.json',
  83. dest: ['bower.json', 'package.json'],
  84. indent: ' ',
  85. fields: ['title', 'description', 'version', 'homepage', 'keywords', 'dependencies']
  86. }
  87. }
  88. });
  89. grunt.registerTask('updatejson', function() {
  90. // set config vars
  91. var options = this.options();
  92. if (typeof(options.dest) === 'string') {
  93. options.dest = [options.dest];
  94. }
  95. // check that all files exist
  96. var files = (JSON.parse(JSON.stringify(options.dest)));
  97. files.push(options.src);
  98. for (var d = 0; d < files.length; d++) {
  99. if (!grunt.file.exists(files[d])) {
  100. grunt.log.error("file " + files[d] + " not found");
  101. return false;
  102. }
  103. }
  104. // read source data
  105. grunt.log.writeln("Reading from " + options.src);
  106. var src = grunt.file.readJSON(options.src);
  107. // update destination files
  108. for (d = 0; d < options.dest.length; d++) {
  109. var data = grunt.file.readJSON(options.dest[d]);
  110. for (var f = 0; f < options.fields.length; f++) {
  111. var field = options.fields[f];
  112. if (typeof(data[field]) !== 'undefined') {
  113. data[field] = src[field];
  114. }
  115. }
  116. grunt.file.write(options.dest[d], JSON.stringify(data, options.indent, 2));
  117. grunt.log.writeln("Updated " + options.dest[d]);
  118. }
  119. });
  120. // These plugins provide necessary tasks.
  121. grunt.loadNpmTasks('grunt-contrib-clean');
  122. grunt.loadNpmTasks('grunt-contrib-concat');
  123. grunt.loadNpmTasks('grunt-contrib-uglify');
  124. grunt.loadNpmTasks('grunt-contrib-qunit');
  125. grunt.loadNpmTasks('grunt-contrib-jshint');
  126. grunt.loadNpmTasks('grunt-contrib-watch');
  127. grunt.loadNpmTasks('grunt-contrib-connect');
  128. grunt.registerTask('test', ['connect', 'jshint', 'qunit']);
  129. grunt.registerTask('build', ['clean', 'concat', 'uglify', 'updatejson']);
  130. grunt.registerTask('default', ['test', 'build']);
  131. };