const gulp = require('gulp'); const sass = require('gulp-sass')(require('sass')); const cleanCSS = require('gulp-clean-css'); const sourcemaps = require('gulp-sourcemaps'); const autoprefixer = require('gulp-autoprefixer'); const browserSync = require('browser-sync').create(); const fileInclude = require('gulp-file-include'); const concat = require('gulp-concat'); const terser = require('gulp-terser'); // Пути const paths = { scss: { src: 'src/scss/**/*.scss', dest: 'dist/css/' }, js: { src: 'src/js/**/*.js', dest: 'dist/js/' }, html: { src: 'src/html/*.html', dest: 'dist/' } }; // SCSS -> CSS function styles() { return gulp.src('src/scss/main.scss') .pipe(sourcemaps.init()) .pipe(sass().on('error', sass.logError)) .pipe(autoprefixer()) .pipe(cleanCSS()) .pipe(sourcemaps.write('.')) .pipe(gulp.dest(paths.scss.dest)) .pipe(browserSync.stream()); } // JS -> bundle + minify function scripts() { return gulp.src(paths.js.src) .pipe(sourcemaps.init()) .pipe(concat('main.js')) .pipe(terser()) .pipe(sourcemaps.write('.')) .pipe(gulp.dest(paths.js.dest)) .pipe(browserSync.stream()); } // HTML + partials function html() { return gulp.src(paths.html.src) .pipe(fileInclude({ prefix: '@@', basepath: '@file' })) .pipe(gulp.dest(paths.html.dest)) .pipe(browserSync.stream()); } // Слежение и сервер function serve() { browserSync.init({ server: { baseDir: 'dist/' } }); gulp.watch(paths.scss.src, styles); gulp.watch(paths.js.src, scripts); gulp.watch('src/html/**/*.html', html); } // Экспорт задач exports.default = gulp.series( gulp.parallel(styles, scripts, html), serve );