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