1. var gulp = require('gulp');
  2. var jshintorig = require('jshint');
  3. var jshint = require('gulp-jshint');
  4. var concat = require('gulp-concat');
  5. var rename = require('gulp-rename');
  6. var uglify = require('gulp-uglify');
  7. var notify = require('gulp-notify');
  8. var sass = require('gulp-sass');
  9. var autoprefixer = require('gulp-autoprefixer');
  10. var sourcemaps = require('gulp-sourcemaps');
  11. var plumber = require('gulp-plumber');
  12. var del = require('del');
  13. var data = require('gulp-data');
  14. var stylus = require('gulp-stylus');
  15. var nib = require('nib');
  16. var browserSync = require('browser-sync').create();
  17. var reload = browserSync.reload
  18. var reportError = function (error) {
  19. var lineNumber = (error.lineNumber) ? 'LINE ' + error.lineNumber + ' -- ' : '';
  20. notify({
  21. title: 'Task Failed [' + error.plugin + ']',
  22. message: lineNumber + 'See console.',
  23. }).write(error);
  24. var report = '';
  25. report += 'TASK:' + ' [' + error.plugin + ']\n';
  26. report += 'PROB:' + ' ' + error.message + '\n';
  27. if (error.lineNumber) { report += 'LINE:' + ' ' + error.lineNumber + '\n'; }
  28. if (error.fileName) { report += 'FILE:' + ' ' + error.fileName + '\n'; }
  29. console.error(report);
  30. this.emit('end');
  31. }
  32. var reportJSHintError = function(error) {
  33. var lineNumber = (error.lineNumber) ? 'LINE ' + error.lineNumber + ' -- ' : '';
  34. notify({
  35. title: 'Task Failed [' + error.plugin + ']',
  36. message: lineNumber + 'See console.',
  37. }).write(error);
  38. this.emit('end');
  39. }
  40. gulp.task('clean', function() {
  41. return del(['dist']);
  42. });
  43. gulp.task('scripts', function() {
  44. return gulp.src('app/source/scripts/**/*.js')
  45. .pipe(plumber({ errorHandler: reportJSHintError }))
  46. .pipe(sourcemaps.init())
  47. .pipe(jshint())
  48. .pipe(jshint.reporter('jshint-stylish'))
  49. .pipe(concat('main.js'))
  50. .pipe(rename({ suffix: '.min' }))
  51. .pipe(uglify())
  52. .pipe(sourcemaps.write())
  53. .pipe(gulp.dest('app/dist/scripts'));
  54. // .pipe(notify({ message: 'Scripts task complete' }));
  55. });
  56. gulp.task('scss', function() {
  57. return gulp.src('app/source/scss/**/*.scss')
  58. .pipe(plumber({ errorHandler: reportError }))
  59. .pipe(sourcemaps.init())
  60. .pipe(autoprefixer('last 2 versions', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
  61. .pipe(sass({ style: 'compressed', }))
  62. .pipe(concat('main.css'))
  63. .pipe(rename({ suffix: '.min' }))
  64. .pipe(sourcemaps.write())
  65. .pipe(gulp.dest('app/dist/styles'));
  66. //.pipe(notify({ message: 'Styles task complete' }));
  67. });
  68. gulp.task('stylus', function() {
  69. return gulp.src('app/source/stylus/**/styles.styl')
  70. .pipe(plumber({ errorHandler: reportError }))
  71. .pipe(sourcemaps.init())
  72. .pipe(stylus({use: nib(), import: ['nib'], 'include css': true}))
  73. .pipe(concat('styles.css'))
  74. .pipe(rename({ suffix: '.min' }))
  75. .pipe(sourcemaps.write())
  76. .pipe(gulp.dest('app/dist/styles'));
  77. //.pipe(notify({ message: 'Stylus task complete' }));
  78. });
  79. gulp.task('html', function() {
  80. return gulp.src(['app/source/html/**/*.*'])
  81. .pipe(gulp.dest('app/dist'));
  82. });
  83. gulp.task('libs', function() {
  84. return gulp.src(['app/source/libs/**/*.*'])
  85. .pipe(gulp.dest('app/dist/libs'));
  86. });
  87. gulp.task('fonts', function() {
  88. return gulp.src(['app/source/fonts/**/*.*'])
  89. .pipe(gulp.dest('app/dist/fonts'));
  90. });
  91. gulp.task('images', function() {
  92. return gulp.src(['app/source/images/**/*.*'])
  93. .pipe(gulp.dest('app/dist/img'));
  94. });
  95. gulp.task('favicons', function() {
  96. return gulp.src(['app/source/favicons/**/*.*'])
  97. .pipe(gulp.dest('app/dist/favicons'));
  98. });
  99. gulp.task('browserSyncInit', function() {
  100. browserSync.init({
  101. server: 'app/dist',
  102. port: 8080,
  103. logLevel: 'silent'
  104. });
  105. });
  106. gulp.task('browserSync', function() {
  107. gulp.watch('app/dist/**/*').on('change', browserSync.reload);
  108. });
  109. gulp.task('default', ['browserSyncInit'], function() {
  110. tasks = ['clean', 'scripts', 'stylus', 'html', 'libs', 'fonts', 'images', 'favicons', 'browserSync']
  111. gulp.watch('app/source/**/*', tasks);
  112. });