gulpfile.js 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. 'use strict'
  2. const gulp = require('gulp')
  3. const concat = require('gulp-concat')
  4. // const sass = require('gulp-sass')
  5. // const stylus = require('gulp-stylus')
  6. const rename = require('gulp-rename')
  7. const uglify = require('gulp-uglify')
  8. const cleanCSS = require('gulp-clean-css')
  9. const babel = require('gulp-babel')
  10. const gulpsync = require('gulp-sync')(gulp)
  11. const jshint = require('gulp-jshint')
  12. const stylish = require('jshint-stylish')
  13. const expect = require('gulp-expect-file')
  14. const plumber = require('gulp-plumber')
  15. const browserSync = require('browser-sync').create()
  16. const autoprefixer= require('gulp-autoprefixer')
  17. const rewriteCSS = require('gulp-rewrite-css')
  18. const _srcdir = 'tracim/tracim/public/assets/'
  19. const _tpldir = 'tracim/tracim/templates/'
  20. const listCssFiles = [
  21. _srcdir + 'css/bootstrap.min.css',
  22. _srcdir + 'font-awesome-4.2.0/css/font-awesome.css',
  23. _srcdir + 'select2-4.0.3/css/select2.min.css',
  24. _srcdir + 'css/dashboard.css'
  25. ]
  26. const listJsFiles = [
  27. _srcdir + 'select2-4.0.3/js/select2.min.js',
  28. _srcdir + 'js/bootstrap.min.js',
  29. _srcdir + 'js/trad.js',
  30. _srcdir + 'js/main_es5.js'
  31. ]
  32. // CSS task
  33. gulp.task('css', function () {
  34. const dest = _srcdir + '/dist/'
  35. return gulp.src(listCssFiles)
  36. .pipe(expect({verbose: true}, listCssFiles))
  37. .pipe(rewriteCSS({
  38. destination: dest,
  39. // debug: true
  40. }))
  41. // .pipe(sass().on('error', sass.logError))
  42. // .pipe(stylus())
  43. .pipe(autoprefixer({
  44. browsers: ['last 2 versions'],
  45. cascade: false
  46. }))
  47. .pipe(concat('all.css'))
  48. .pipe(gulp.dest(dest))
  49. .pipe(browserSync.stream())
  50. })
  51. // JS tasks
  52. gulp.task('js_hint', function() {
  53. return gulp.src(_srcdir + '/js/main.js')
  54. .pipe(expect({verbose: true}, _srcdir + '/js/main.js'))
  55. .pipe(jshint())
  56. .pipe(jshint.reporter(stylish))
  57. })
  58. gulp.task('js_transpiling', function() {
  59. return gulp.src(_srcdir + '/js/main.js')
  60. .pipe(plumber())
  61. .pipe(babel({ presets: ['es2015'] }))
  62. .pipe(concat('main_es5.js'))
  63. .pipe(gulp.dest(_srcdir + '/js/'))
  64. })
  65. gulp.task('js_concat', function() {
  66. return gulp.src(listJsFiles)
  67. .pipe(expect({verbose: true}, listJsFiles))
  68. .pipe(concat('all.js'))
  69. .pipe(gulp.dest(_srcdir + '/dist/'))
  70. .pipe(browserSync.stream())
  71. })
  72. gulp.task('js_sync', gulpsync.sync(['js_transpiling', 'js_concat']))
  73. gulp.task('js', ['js_hint', 'js_sync'])
  74. // BUILD tasks
  75. gulp.task('prod_css', ['css'], function () {
  76. return gulp.src(_srcdir + '/dist/all.css')
  77. .pipe(expect({verbose: true}, _srcdir + '/dist/all.css'))
  78. .pipe(cleanCSS({keepSpecialComments:0}))
  79. .pipe(concat('all.min.css'))
  80. .pipe(gulp.dest(_srcdir + '/dist/'))
  81. })
  82. gulp.task('prod_js', ['js'], function () {
  83. return gulp.src(_srcdir + '/dist/all.js')
  84. .pipe(expect({verbose: true}, _srcdir + '/dist/all.js'))
  85. .pipe(uglify())
  86. .pipe(concat('all.min.js'))
  87. .pipe(gulp.dest(_srcdir + '/dist/'))
  88. })
  89. gulp.task('prod', ['prod_css', 'prod_js'])
  90. gulp.task('dev', ['css', 'js'])
  91. // WATCH task
  92. gulp.task('watch', function () {
  93. gulp.watch([
  94. _srcdir + '/js/*.js',
  95. '!'+_srcdir+'/js/scripts_es5.js',
  96. '!'+_srcdir+'/js/*.min.*'
  97. ], {verbose: true, debounceDelay: 2000}, ['js'])
  98. gulp.watch([
  99. _srcdir + '/css/*.css',
  100. '!'+_srcdir+'/css/*.min.*',
  101. '!'+_srcdir+'/css/*.map'
  102. ], ['css'])
  103. })
  104. // LIVERELOAD task
  105. gulp.task('livesync', function() {
  106. browserSync.init({
  107. ghostMode: false, // comment this line to mirror input click and scroll on all opened browsers
  108. proxy: "127.0.0.1:8080",
  109. browser: "chromium",
  110. port: 8081
  111. })
  112. gulp.watch(_tpldir + '**/*.html').on('change', browserSync.reload)
  113. })
  114. gulp.task('watchsync', ['watch', 'livesync'])
  115. // DEFAULT task
  116. gulp.task('default', function () {
  117. console.log(`
  118. Usable tasks : watchsync, watch, dev, prod, js, css
  119. Other available tasks : livesync, js_sync, js_concat, js_hint, prod_css, prod_js
  120. `)
  121. })