Gruntfile.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. 'use strict';
  2. module.exports = function(grunt) {
  3. // Project configuration.
  4. grunt.initConfig({
  5. // Metadata.
  6. pkg: grunt.file.readJSON('package.json'),
  7. banner: '/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - ' + '<%= grunt.template.today("yyyy-mm-dd") %>\n' + '<%= pkg.homepage ? "* " + pkg.homepage + "\\n" : "" %>' + '* Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>;' + ' Licensed <%= _.pluck(pkg.licenses, "type").join(", ") %> */\n',
  8. // Task configuration.
  9. clean: {
  10. files: ['dist']
  11. },
  12. concat: {
  13. options: {
  14. banner: '<%= banner %>',
  15. stripBanners: true
  16. },
  17. dist: {
  18. src: ['src/core.js', 'src/trigger.js', 'src/clear.js', 'src/keyboard.js', 'src/alpha.js', 'src/buttons.js', 'src/hex.js', 'src/hue.js', 'src/info.js', 'src/palettes.js', 'src/preview.js', 'src/saturation.js', 'src/gradient.js'],
  19. dest: 'dist/<%= pkg.name %>.js'
  20. },
  21. },
  22. uglify: {
  23. options: {
  24. banner: '<%= banner %>'
  25. },
  26. dist: {
  27. src: '<%= concat.dist.dest %>',
  28. dest: 'dist/<%= pkg.name %>.min.js'
  29. }
  30. },
  31. jshint: {
  32. gruntfile: {
  33. options: {
  34. jshintrc: '.jshintrc'
  35. },
  36. src: 'Gruntfile.js'
  37. },
  38. src: {
  39. options: {
  40. jshintrc: 'src/.jshintrc'
  41. },
  42. src: ['src/**/*.js']
  43. }
  44. },
  45. jsbeautifier: {
  46. files: ['Gruntfile.js', "src/**/*.js"],
  47. options: {
  48. "indent_size": 4,
  49. "indent_char": " ",
  50. "indent_level": 0,
  51. "indent_with_tabs": false,
  52. "preserve_newlines": true,
  53. "max_preserve_newlines": 10,
  54. "jslint_happy": false,
  55. "brace_style": "collapse",
  56. "keep_array_indentation": false,
  57. "keep_function_indentation": false,
  58. "space_before_conditional": true,
  59. "eval_code": false,
  60. "indent_case": false,
  61. "unescape_strings": false
  62. }
  63. },
  64. watch: {
  65. less: {
  66. files: 'less/**/*.less',
  67. tasks: ['css']
  68. }
  69. },
  70. less: {
  71. dist: {
  72. files: {
  73. 'css/asColorPicker.css': ['less/jquery-asColorPicker.less']
  74. }
  75. }
  76. },
  77. autoprefixer: {
  78. options: {
  79. browsers: ['last 2 versions', 'ie 8', 'ie 9', 'android 2.3', 'android 4', 'opera 12']
  80. },
  81. src: {
  82. expand: true,
  83. cwd: 'css/',
  84. src: ['*.css', '!*.min.css'],
  85. dest: 'css/'
  86. }
  87. },
  88. replace: {
  89. bower: {
  90. src: ['bower.json'],
  91. overwrite: true, // overwrite matched source files
  92. replacements: [{
  93. from: /("version": ")([0-9\.]+)(")/g,
  94. to: "$1<%= pkg.version %>$3"
  95. }]
  96. },
  97. jquery: {
  98. src: ['asColorPicker.jquery.json'],
  99. overwrite: true, // overwrite matched source files
  100. replacements: [{
  101. from: /("version": ")([0-9\.]+)(")/g,
  102. to: "$1<%= pkg.version %>$3"
  103. }]
  104. },
  105. },
  106. copy: {
  107. bower: {
  108. files: [{
  109. expand: true,
  110. flatten: true,
  111. cwd: 'bower_components/',
  112. src: [
  113. 'jquery-asColor/dist/jquery-asColor.js',
  114. 'jquery-asGradient/dist/jquery-asGradient.js'
  115. ],
  116. dest: 'libs/'
  117. }]
  118. }
  119. }
  120. });
  121. // These plugins provide necessary tasks.
  122. // Load npm plugins to provide necessary tasks.
  123. require('load-grunt-tasks')(grunt, {
  124. pattern: ['grunt-*']
  125. });
  126. // Default task.
  127. grunt.registerTask('default', ['js', 'dist']);
  128. grunt.registerTask('css', ['less', 'autoprefixer']);
  129. grunt.registerTask('js', ['jsbeautifier', 'jshint']);
  130. grunt.registerTask('dist', ['clean', 'concat', 'uglify']);
  131. grunt.registerTask('version', [
  132. 'replace:bower',
  133. 'replace:jquery'
  134. ]);
  135. };