gulpfile.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. 'use strict';
  2. var gulp = require('gulp')
  3. , browserify = require('browserify')
  4. , buffer = require('vinyl-buffer')
  5. , connect = require('gulp-connect')
  6. , del = require('del')
  7. , eslint = require('gulp-eslint')
  8. , insert = require('gulp-insert')
  9. , path = require('path')
  10. , rename = require('gulp-rename')
  11. , sass = require('gulp-sass')
  12. , source = require('vinyl-source-stream')
  13. , stream = require('event-stream')
  14. , uglify = require('gulp-uglify')
  15. , autoprefixer = require('gulp-autoprefixer')
  16. , zip = require('gulp-zip');
  17. var version = '/* perfect-scrollbar v' + require('./package').version + ' */\n';
  18. gulp.task('lint', function () {
  19. return gulp.src(['./src/**/*.js', './gulpfile.js'])
  20. .pipe(eslint())
  21. .pipe(eslint.format())
  22. .pipe(eslint.failOnError());
  23. });
  24. gulp.task('clean:js', function () {
  25. return del(['./dist/js/*.js']);
  26. });
  27. gulp.task('clean:js:min', function () {
  28. return del(['./dist/js/min/*.js']);
  29. });
  30. var jsEntries = [
  31. './src/js/adaptor/global.js',
  32. './src/js/adaptor/jquery.js'
  33. ];
  34. var autoPrefixerConfig = {
  35. browsers: ['> 0%'], // '> 0%' forces autoprefixer to use all the possible prefixes. See https://github.com/ai/browserslist#queries for more details. IMO 'last 3 versions' would be good enough.
  36. cascade: false
  37. };
  38. gulp.task('js', ['clean:js'], function () {
  39. var tasks = jsEntries.map(function (src) {
  40. return browserify([src]).bundle()
  41. .pipe(source(path.basename(src)))
  42. .pipe(buffer())
  43. .pipe(insert.prepend(version))
  44. .pipe(rename(function (path) {
  45. if (path.basename === 'global') {
  46. path.basename = 'perfect-scrollbar';
  47. } else {
  48. path.basename = 'perfect-scrollbar.' + path.basename;
  49. }
  50. }))
  51. .pipe(gulp.dest('./dist/js'))
  52. .pipe(connect.reload());
  53. });
  54. return stream.merge.apply(null, tasks);
  55. });
  56. gulp.task('js:min', ['clean:js:min'], function () {
  57. var tasks = jsEntries.map(function (src) {
  58. return browserify([src]).bundle()
  59. .pipe(source(path.basename(src)))
  60. .pipe(buffer())
  61. .pipe(uglify())
  62. .pipe(insert.prepend(version))
  63. .pipe(rename(function (path) {
  64. if (path.basename === 'global') {
  65. path.basename = 'perfect-scrollbar.min';
  66. } else {
  67. path.basename = 'perfect-scrollbar.' + path.basename + '.min';
  68. }
  69. }))
  70. .pipe(gulp.dest('./dist/js/min'))
  71. .pipe(connect.reload());
  72. });
  73. return stream.merge.apply(null, tasks);
  74. });
  75. gulp.task('clean:css', function () {
  76. return del(['./dist/css/perfect-scrollbar.css']);
  77. });
  78. gulp.task('clean:css:min', function () {
  79. return del(['./dist/css/perfect-scrollbar.min.css']);
  80. });
  81. gulp.task('css', ['clean:css'], function () {
  82. return gulp.src('./src/css/main.scss')
  83. .pipe(sass())
  84. .pipe(autoprefixer(autoPrefixerConfig))
  85. .pipe(insert.prepend(version))
  86. .pipe(rename('perfect-scrollbar.css'))
  87. .pipe(gulp.dest('./dist/css'))
  88. .pipe(connect.reload());
  89. });
  90. gulp.task('css:min', ['clean:css:min'], function () {
  91. return gulp.src('./src/css/main.scss')
  92. .pipe(sass({outputStyle: 'compressed'}))
  93. .pipe(autoprefixer(autoPrefixerConfig))
  94. .pipe(insert.prepend(version))
  95. .pipe(rename('perfect-scrollbar.min.css'))
  96. .pipe(gulp.dest('./dist/css'));
  97. });
  98. gulp.task('build', ['js', 'js:min', 'css', 'css:min']);
  99. gulp.task('connect', ['build'], function () {
  100. connect.server({
  101. root: __dirname,
  102. livereload: true
  103. });
  104. });
  105. gulp.task('watch', function () {
  106. gulp.watch(['src/js/**/*'], ['js']);
  107. gulp.watch(['src/css/**/*'], ['css']);
  108. });
  109. gulp.task('serve', ['connect', 'watch']);
  110. gulp.task('compress', function () {
  111. return gulp.src('./dist/**')
  112. .pipe(zip('perfect-scrollbar.zip'))
  113. .pipe(gulp.dest('./dist'));
  114. });
  115. gulp.task('default', ['lint', 'build']);