gulpfile.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. const gulp = require('gulp');
  2. const sass = require('gulp-sass')(require('sass'));
  3. const autoprefixer = require('gulp-autoprefixer');
  4. const cleanCSS = require('gulp-clean-css');
  5. const sourcemaps = require('gulp-sourcemaps');
  6. const concat = require('gulp-concat');
  7. const uglify = require('gulp-uglify');
  8. const rename = require('gulp-rename');
  9. const plumber = require('gulp-plumber');
  10. const notify = require('gulp-notify');
  11. // Пути к файлам
  12. const paths = {
  13. sass: {
  14. src: 'resources/sass/**/*.scss',
  15. dest: 'public/css/'
  16. },
  17. js: {
  18. src: 'resources/js/**/*.js',
  19. dest: 'public/js/'
  20. }
  21. };
  22. // Обработка ошибок
  23. const onError = function(err) {
  24. notify.onError({
  25. title: "Gulp error in " + err.plugin,
  26. message: err.toString()
  27. })(err);
  28. this.emit('end');
  29. };
  30. // Компиляция SASS
  31. function compileSass() {
  32. return gulp.src(paths.sass.src)
  33. .pipe(plumber({ errorHandler: onError }))
  34. .pipe(sourcemaps.init())
  35. .pipe(sass({
  36. outputStyle: 'expanded',
  37. includePaths: ['resources/sass']
  38. }).on('error', sass.logError))
  39. .pipe(autoprefixer({
  40. cascade: false
  41. }))
  42. .pipe(sourcemaps.write('.'))
  43. .pipe(gulp.dest(paths.sass.dest))
  44. .pipe(notify({
  45. message: 'SASS compiled successfully!',
  46. onLast: true
  47. }));
  48. }
  49. // Минификация CSS
  50. function minifyCss() {
  51. return gulp.src('public/css/styles.css')
  52. .pipe(plumber({ errorHandler: onError }))
  53. .pipe(cleanCSS({
  54. level: 2
  55. }))
  56. .pipe(rename({
  57. suffix: '.min'
  58. }))
  59. .pipe(gulp.dest(paths.sass.dest))
  60. .pipe(notify({
  61. message: 'CSS minified successfully!',
  62. onLast: true
  63. }));
  64. }
  65. // Обработка JS
  66. function compileJs() {
  67. return gulp.src(paths.js.src)
  68. .pipe(plumber({ errorHandler: onError }))
  69. .pipe(sourcemaps.init())
  70. .pipe(concat('script.js'))
  71. .pipe(sourcemaps.write('.'))
  72. .pipe(gulp.dest(paths.js.dest))
  73. .pipe(notify({
  74. message: 'JS compiled successfully!',
  75. onLast: true
  76. }));
  77. }
  78. // Минификация JS
  79. function minifyJs() {
  80. return gulp.src('public/js/script.js')
  81. .pipe(plumber({ errorHandler: onError }))
  82. .pipe(uglify())
  83. .pipe(rename({
  84. suffix: '.min'
  85. }))
  86. .pipe(gulp.dest(paths.js.dest))
  87. .pipe(notify({
  88. message: 'JS minified successfully!',
  89. onLast: true
  90. }));
  91. }
  92. // Наблюдение за изменениями
  93. function watchFiles() {
  94. gulp.watch(paths.sass.src, gulp.series(compileSass));
  95. gulp.watch(paths.js.src, gulp.series(compileJs));
  96. }
  97. // Экспорт задач
  98. exports.sass = compileSass;
  99. exports.js = compileJs;
  100. exports.minifyCss = minifyCss;
  101. exports.minifyJs = minifyJs;
  102. exports.watch = gulp.series(
  103. gulp.parallel(compileSass, compileJs),
  104. watchFiles
  105. );
  106. exports.build = gulp.series(
  107. gulp.parallel(compileSass, compileJs),
  108. gulp.parallel(minifyCss, minifyJs)
  109. );
  110. exports.default = exports.watch;