const { src, dest, series, parallel, watch } = require("gulp"); const path = require("path"); const del = require("del"); const babel = require("gulp-babel"); const terser = require("gulp-terser"); const sass = require("gulp-sass"); const postcss = require("gulp-postcss"); const postcssPresetEnv = require("postcss-preset-env"); const cssnano = require("cssnano"); const browserSync = require("browser-sync"); sass.compiler = require("node-sass"); const server = browserSync.create(); const babelConfig = require("./babel.config.js"); const postcssPlugins = [postcssPresetEnv(), cssnano()]; const srcDir = "./src/"; const buildDir = "./build/"; const jsSrc = path.join(srcDir, "js/**/*.js"); const jsDest = path.join(buildDir, "js/"); const scssSrc = path.join(srcDir, "scss/**/*.scss"); const cssDest = path.join(buildDir, "css/"); function jsClean() { return del(jsDest, { force: true }); } function cssClean() { return del(cssDest, { force: true }); } function jsTranspile() { return src(jsSrc, { sourcemaps: true }) .pipe(babel(babelConfig)) .pipe(terser()) .pipe(dest(jsDest, { sourcemaps: true })); } function scssCompile() { return src(scssSrc, { sourcemaps: true }) .pipe(sass().on("error", sass.logError)) .pipe(postcss(postcssPlugins)) .pipe(dest(cssDest, { sourcemaps: true })); } function serve(done) { server.init({ open: false, server: { baseDir: buildDir, } // or instead of server // proxy: "example.home" }); done(); } function reload(done) { server.reload(); done(); } const jsWatch = () => watch(jsSrc, { ignoreInitial: false }, series(jsClean, jsTranspile)); const cssWatch = () => watch(scssSrc, { ignoreInitial: false }, series(cssClean, scssCompile)); exports.default = parallel(jsWatch, cssWatch, serve);