Gulpfile.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. var gulp = require('gulp-help')(require('gulp')),
  2. bower = require('gulp-bower')
  3. sass = require('gulp-sass'),
  4. uglify = require('gulp-uglify'),
  5. rename = require('gulp-rename'),
  6. concat = require('gulp-concat'),
  7. notify = require('gulp-notify'),
  8. autoprefixer = require('gulp-autoprefixer'),
  9. imagemin = require('gulp-imagemin');
  10. var basicConfig = {
  11. srcDir: './src',
  12. destDir: './static',
  13. bowerDir: './bower_components'
  14. };
  15. var config = {
  16. scss: {
  17. src: basicConfig.srcDir + '/scss',
  18. dest: basicConfig.destDir + '/css'
  19. },
  20. imgs: {
  21. src: basicConfig.srcDir + '/imgs',
  22. dest: basicConfig.destDir + '/imgs'
  23. },
  24. js: {
  25. flaskbb: basicConfig.destDir + '/js/flaskbb.js',
  26. emoji: basicConfig.destDir + '/js/emoji.js',
  27. editorConfig: basicConfig.destDir + '/js/editor.js',
  28. dest: basicConfig.destDir + '/js'
  29. },
  30. editor: {
  31. lib: basicConfig.bowerDir + '/bootstrap-markdown/js/bootstrap-markdown.js',
  32. parser: basicConfig.bowerDir + '/marked/lib/marked.js',
  33. textcomplete: basicConfig.bowerDir + '/jquery-textcomplete/dist/jquery.textcomplete.min.js'
  34. },
  35. jquery: basicConfig.bowerDir + '/jquery/dist/jquery.min.js',
  36. bootstrap: {
  37. js: basicConfig.bowerDir + '/bootstrap-sass/assets/javascripts/bootstrap.min.js',
  38. scss: basicConfig.bowerDir + '/bootstrap-sass/assets/stylesheets'
  39. },
  40. font: {
  41. icons: basicConfig.bowerDir + '/font-awesome/fonts/*.**',
  42. scss: basicConfig.bowerDir + '/font-awesome/scss',
  43. dest: basicConfig.destDir + '/fonts'
  44. }
  45. };
  46. gulp.task('bower', 'runs bower', function() {
  47. return bower()
  48. .pipe(gulp.dest(basicConfig.bowerDir))
  49. });
  50. gulp.task('update', 'updates the bower dependencies', function() {
  51. return bower({ cmd: 'update' });
  52. });
  53. gulp.task('icons', 'copies the icons to destDir', function() {
  54. return gulp.src(config.font.icons)
  55. .pipe(gulp.dest(config.font.dest));
  56. });
  57. gulp.task('image', 'optimizes the images', function() {
  58. return gulp.src(config.imgs.src + '/*')
  59. .pipe(imagemin({
  60. progressive: true,
  61. svgoPlugins: [
  62. { removeViewBox: false },
  63. { cleanupIDs: false }
  64. ]
  65. }))
  66. .pipe(gulp.dest(config.imgs.dest));
  67. });
  68. gulp.task('sass', 'compiles all scss files to one css file', function () {
  69. return gulp.src(config.scss.src + '/**/*.scss')
  70. .pipe(sass({
  71. outputStyle: 'compressed',
  72. precision: 8,
  73. includePaths: [
  74. basicConfig.srcDir + '/scss',
  75. config.bootstrap.scss,
  76. config.font.scss
  77. ]})
  78. .on('error', notify.onError(function(error) {
  79. return "Error: " + error.message;
  80. })))
  81. .pipe(autoprefixer('last 2 version'))
  82. .pipe(rename({basename: 'styles', extname: '.min.css'}))
  83. .pipe(gulp.dest(config.scss.dest));
  84. });
  85. gulp.task('main-scripts', 'concates all main js files to one js file', function() {
  86. return gulp.src([config.jquery,
  87. config.bootstrap.js,
  88. config.js.flaskbb])
  89. .pipe(concat('scripts.min.js'))
  90. .pipe(uglify())
  91. .pipe(gulp.dest(config.js.dest));
  92. });
  93. gulp.task('editor-scripts', 'concates all editor related scripts to one file', function() {
  94. return gulp.src([config.editor.parser,
  95. config.editor.lib,
  96. config.editor.textcomplete,
  97. config.js.emoji,
  98. config.js.editorConfig])
  99. .pipe(concat('editor.min.js'))
  100. .pipe(uglify())
  101. .pipe(gulp.dest(config.js.dest));
  102. });
  103. gulp.task('vendor-scripts', 'concates all vendor js files to one js file (useful for debugging)', function() {
  104. return gulp.src([config.jquery,
  105. config.bootstrap.js,
  106. config.editor.parser,
  107. config.editor.lib,
  108. config.editor.textcomplete])
  109. .pipe(concat('scripts.min.js'))
  110. .pipe(uglify())
  111. .pipe(gulp.dest(config.js.dest));
  112. });
  113. gulp.task('scripts', ['main-scripts', 'editor-scripts'], function() {});
  114. gulp.task('watch', 'watches for .scss and .js changes', function() {
  115. gulp.watch(config.sassPath + '/*.scss', ['sass']);
  116. gulp.watch(config.jsPath + '/*.js', ['scripts'])
  117. });
  118. gulp.task('default', 'default command', ['bower', 'icons', 'sass', 'scripts', 'image']);