gulpfile.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. 'use strict';
  2. require('cache-require-paths');
  3. var gulp = require('gulp');
  4. var babelify = require('babelify');
  5. var browserify = require('browserify');
  6. var buffer = require('vinyl-buffer');
  7. var imageop = require('gulp-image-optimization');
  8. var jshint = require('gulp-jshint');
  9. var less = require('gulp-less');
  10. var minify = require('gulp-minify-css');
  11. var rename = require('gulp-rename');
  12. var source = require('vinyl-source-stream');
  13. var sourcemaps = require('gulp-sourcemaps');
  14. var uglify = require('gulp-uglify');
  15. var glob = require('glob');
  16. var del = require('del');
  17. var misago = '../misago/static/misago/';
  18. // Entry points
  19. gulp.task('watch', ['fastbuild'], function() {
  20. gulp.watch('src/**/*.js', ['fastsource']);
  21. gulp.watch('style/**/*.less', ['faststyle']);
  22. });
  23. gulp.task('deploy', ['build']);
  24. // Builds
  25. gulp.task('fastbuild', ['fastsource', 'faststyle', 'faststatic']);
  26. gulp.task('build', [
  27. 'source', 'style', 'static'
  28. ]);
  29. // Source tasks
  30. function getSources() {
  31. var sources = ['src/index.js'];
  32. function include(pattern) {
  33. var paths = glob.sync(pattern);
  34. paths.forEach(function(path) {
  35. sources.push(path);
  36. });
  37. };
  38. include('src/initializers/*.js');
  39. include('src/components/*.js');
  40. include('src/components/**/root.js');
  41. return sources.map(function(path) {
  42. return path;
  43. });
  44. };
  45. gulp.task('lintsource', function() {
  46. return gulp.src('src/**/*.js')
  47. .pipe(jshint())
  48. .pipe(jshint.reporter('default'));
  49. });
  50. gulp.task('fastsource', ['lintsource'], function() {
  51. return browserify(getSources())
  52. .transform(babelify)
  53. .bundle()
  54. .pipe(source('misago.js'))
  55. .pipe(buffer())
  56. .pipe(gulp.dest(misago + 'js'));
  57. });
  58. gulp.task('source', ['lintsource'], function() {
  59. process.env.NODE_ENV = 'production';
  60. return browserify(getSources())
  61. .transform(babelify)
  62. .bundle()
  63. .pipe(source('misago.js'))
  64. .pipe(buffer())
  65. .pipe(sourcemaps.init())
  66. .pipe(uglify())
  67. .pipe(sourcemaps.write('.'))
  68. .pipe(gulp.dest(misago + 'js'));
  69. });
  70. // Styles tasks
  71. gulp.task('cleanstyle', function(cb) {
  72. del(misago + 'css', cb);
  73. });
  74. gulp.task('faststyle', function() {
  75. return gulp.src('style/index.less')
  76. .pipe(less())
  77. .pipe(rename('misago.css'))
  78. .pipe(gulp.dest(misago + 'css'));
  79. });
  80. gulp.task('style', function() {
  81. return gulp.src('style/index.less')
  82. .pipe(less())
  83. .pipe(minify())
  84. .pipe(rename('misago.css'))
  85. .pipe(gulp.dest(misago + 'css'));
  86. });
  87. // Static tasks
  88. gulp.task('copyfonts', function(cb) {
  89. return gulp.src('static/fonts/**/*')
  90. .pipe(gulp.dest(misago + 'fonts'));
  91. });
  92. gulp.task('fastcopyimages', function() {
  93. return gulp.src('static/img/**/*')
  94. .pipe(gulp.dest(misago + 'img'));
  95. });
  96. gulp.task('copyimages', function() {
  97. return gulp.src('static/img/**/*')
  98. .pipe(imageop({
  99. optimizationLevel: 9
  100. }))
  101. .pipe(gulp.dest(misago + 'img'));
  102. });
  103. gulp.task('faststatic', ['copyfonts', 'fastcopyimages']);
  104. gulp.task('static', ['copyfonts', 'copyimages']);
  105. // Vendor tasks
  106. // Test task
  107. gulp.task('linttests', function() {
  108. return gulp.src(['tests/**/*.js'])
  109. .pipe(jshint())
  110. .pipe(jshint.reporter('default'));
  111. });
  112. gulp.task('test', ['linttests', 'lintsource'], function() {
  113. var mochify = require('mochify');
  114. mochify('tests/**/*.js')
  115. .transform(babelify)
  116. .bundle();
  117. });