gulpfile.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. /*jshint node: true, strict: false */
  2. var fs = require('fs');
  3. var gulp = require('gulp');
  4. var rename = require('gulp-rename');
  5. var replace = require('gulp-replace');
  6. // ----- hint ----- //
  7. var jshint = require('gulp-jshint');
  8. gulp.task( 'hint-js', function() {
  9. return gulp.src('js/*.js')
  10. .pipe( jshint() )
  11. .pipe( jshint.reporter('default') );
  12. });
  13. gulp.task( 'hint-test', function() {
  14. return gulp.src('test/unit/*.js')
  15. .pipe( jshint() )
  16. .pipe( jshint.reporter('default') );
  17. });
  18. gulp.task( 'hint-task', function() {
  19. return gulp.src('gulpfile.js')
  20. .pipe( jshint() )
  21. .pipe( jshint.reporter('default') );
  22. });
  23. var jsonlint = require('gulp-json-lint');
  24. gulp.task( 'jsonlint', function() {
  25. return gulp.src( '*.json' )
  26. .pipe( jsonlint() )
  27. .pipe( jsonlint.report('verbose') );
  28. });
  29. gulp.task( 'hint', [ 'hint-js', 'hint-test', 'hint-task', 'jsonlint' ]);
  30. // -------------------------- make pkgd -------------------------- //
  31. // regex for banner comment
  32. var reBannerComment = new RegExp('^\\s*(?:\\/\\*[\\s\\S]*?\\*\\/)\\s*');
  33. function getBanner() {
  34. var src = fs.readFileSync( 'js/isotope.js', 'utf8' );
  35. var matches = src.match( reBannerComment );
  36. var banner = matches[0].replace( 'Isotope', 'Isotope PACKAGED' );
  37. return banner;
  38. }
  39. function addBanner( str ) {
  40. return replace( /^/, str );
  41. }
  42. var rjsOptimize = require('gulp-requirejs-optimize');
  43. gulp.task( 'requirejs', function() {
  44. var definitionRE = /define\(\s*'isotope\/isotope'(.|\n)+\],/;
  45. var banner = getBanner();
  46. // HACK src is not needed
  47. // should refactor rjsOptimize to produce src
  48. return gulp.src('js/isotope.js')
  49. .pipe( rjsOptimize({
  50. baseUrl: 'bower_components',
  51. optimize: 'none',
  52. include: [
  53. 'jquery-bridget/jquery-bridget',
  54. 'isotope/isotope'
  55. ],
  56. paths: {
  57. isotope: '../js/',
  58. jquery: 'empty:'
  59. }
  60. }) )
  61. // munge AMD definition
  62. .pipe( replace( definitionRE, function( definition ) {
  63. // remove named module
  64. return definition.replace( "'isotope/isotope',", '' )
  65. // use explicit file paths, './item' -> 'isotope/js/item'
  66. .replace( /'.\//g, "'isotope/js/" );
  67. }) )
  68. .pipe( replace( "define( 'isotope/", "define( 'isotope/js/" ) )
  69. // add banner
  70. .pipe( addBanner( banner ) )
  71. .pipe( rename('isotope.pkgd.js') )
  72. .pipe( gulp.dest('dist') );
  73. });
  74. // ----- uglify ----- //
  75. var uglify = require('gulp-uglify');
  76. gulp.task( 'uglify', [ 'requirejs' ], function() {
  77. var banner = getBanner();
  78. gulp.src('dist/isotope.pkgd.js')
  79. .pipe( uglify() )
  80. // add banner
  81. .pipe( addBanner( banner ) )
  82. .pipe( rename('isotope.pkgd.min.js') )
  83. .pipe( gulp.dest('dist') );
  84. });
  85. // ----- version ----- //
  86. // set version in source files
  87. var minimist = require('minimist');
  88. var gutil = require('gulp-util');
  89. var chalk = require('chalk');
  90. // use gulp version -t 1.2.3
  91. gulp.task( 'version', function() {
  92. var args = minimist( process.argv.slice(3) );
  93. var version = args.t;
  94. if ( !version || !/^\d\.\d+\.\d+/.test( version ) ) {
  95. gutil.log( 'invalid version: ' + chalk.red( version ) );
  96. return;
  97. }
  98. gutil.log( 'ticking version to ' + chalk.green( version ) );
  99. gulp.src('js/isotope.js')
  100. .pipe( replace( /Isotope v\d\.\d+\.\d+/, 'Isotope v' + version ) )
  101. .pipe( gulp.dest('js') );
  102. gulp.src( [ 'package.json' ] )
  103. .pipe( replace( /"version": "\d\.\d+\.\d+"/, '"version": "' + version + '"' ) )
  104. .pipe( gulp.dest('.') );
  105. });
  106. // ----- default ----- //
  107. gulp.task( 'default', [
  108. 'hint',
  109. 'uglify'
  110. ]);