gulp-web/gulpfile.js

117 lines
2.9 KiB
JavaScript
Raw Normal View History

2020-05-19 14:58:29 +00:00
const { src, dest, series, parallel, watch } = require('gulp');
2020-05-01 14:30:14 +00:00
2020-05-19 14:58:29 +00:00
const path = require('path');
const del = require('del');
const babel = require('gulp-babel');
const terser = require('gulp-terser');
const mustache = require('gulp-mustache');
2020-05-19 15:17:41 +00:00
const fileInclude = require('gulp-file-include');
2020-05-19 14:58:29 +00:00
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');
2020-05-01 14:30:14 +00:00
2020-05-19 14:58:29 +00:00
sass.compiler = require('node-sass');
2020-05-01 14:30:14 +00:00
const server = browserSync.create();
2020-05-19 14:58:29 +00:00
const babelConfig = require('./babel.config.js');
2020-05-01 14:30:14 +00:00
const postcssPlugins = [postcssPresetEnv(), cssnano()];
2020-05-19 14:58:29 +00:00
const srcDir = './src/';
const buildDir = './build/';
const jsSrc = path.join(srcDir, 'js/**/*.js');
const jsDest = path.join(buildDir, 'js/');
2020-05-19 15:03:38 +00:00
const htmlTemplateSrc = path.join(srcDir, 'html/templates/**/*.mustache');
2020-05-19 15:17:41 +00:00
const includeBaseDir = path.join(srcDir, 'includes/');
const includeSrc = path.join(includeBaseDir, '**/*');
2020-05-19 14:58:29 +00:00
const scssSrc = path.join(srcDir, 'scss/**/*.scss');
const cssDest = path.join(buildDir, 'css/');
const htmlSrc = path.join(srcDir, 'html/**/*.html');
2020-05-01 17:39:31 +00:00
const htmlDest = buildDir;
2020-05-19 14:58:29 +00:00
const assetSrc = path.join(srcDir, 'assets/**/*');
const assetDest = path.join(buildDir, 'assets/');
2020-05-01 14:30:14 +00:00
function jsClean() {
2020-05-19 14:58:29 +00:00
return del(jsDest, { force: true });
2020-05-01 14:30:14 +00:00
}
function cssClean() {
2020-05-19 14:58:29 +00:00
return del(cssDest, { force: true });
2020-05-01 14:30:14 +00:00
}
2020-05-01 17:39:31 +00:00
function htmlClean() {
2020-05-19 14:58:29 +00:00
return del(path.join(htmlDest, '*.html'), { force: true });
2020-05-01 17:39:31 +00:00
}
function assetClean() {
2020-05-19 14:58:29 +00:00
return del(assetDest, { force: true });
2020-05-01 17:39:31 +00:00
}
2020-05-01 14:30:14 +00:00
function jsTranspile() {
2020-05-19 14:58:29 +00:00
return src(jsSrc, { sourcemaps: true })
.pipe(babel(babelConfig))
.pipe(terser())
.pipe(dest(jsDest, { sourcemaps: true }));
2020-05-01 14:30:14 +00:00
}
function scssCompile() {
2020-05-19 14:58:29 +00:00
return src(scssSrc, { sourcemaps: true })
.pipe(sass().on('error', sass.logError))
.pipe(postcss(postcssPlugins))
.pipe(dest(cssDest, { sourcemaps: true }))
.pipe(server.stream());
2020-05-01 14:30:14 +00:00
}
2020-05-01 17:39:31 +00:00
function htmlCompile() {
2020-05-19 14:58:29 +00:00
return src(htmlSrc)
2020-05-19 15:17:41 +00:00
.pipe(
fileInclude({
basepath: includeBaseDir,
})
)
2020-05-19 14:58:29 +00:00
.pipe(mustache())
.pipe(dest(htmlDest));
2020-05-01 17:39:31 +00:00
}
function assetCompile() {
2020-05-19 14:58:29 +00:00
return src(assetSrc).pipe(dest(assetDest));
2020-05-01 17:39:31 +00:00
}
2020-05-01 14:30:14 +00:00
function serve(done) {
2020-05-19 14:58:29 +00:00
server.init({
open: false,
server: {
baseDir: buildDir,
},
// or instead of server
// proxy: "example.home"
});
done();
2020-05-01 14:30:14 +00:00
}
function reload(done) {
2020-05-19 14:58:29 +00:00
server.reload();
done();
2020-05-01 14:30:14 +00:00
}
const jsWatch = () =>
2020-05-19 14:58:29 +00:00
watch(jsSrc, { ignoreInitial: false }, series(jsClean, jsTranspile, reload));
2020-05-01 14:30:14 +00:00
const cssWatch = () =>
2020-05-19 14:58:29 +00:00
watch(scssSrc, { ignoreInitial: false }, series(cssClean, scssCompile));
2020-05-01 17:39:31 +00:00
const htmlWatch = () =>
2020-05-19 14:58:29 +00:00
watch(
2020-05-19 15:17:41 +00:00
[htmlSrc, includeSrc, mustacheSrc],
2020-05-19 14:58:29 +00:00
{ ignoreInitial: false },
series(htmlClean, htmlCompile, reload)
);
2020-05-01 17:39:31 +00:00
const assetWatch = () =>
2020-05-19 14:58:29 +00:00
watch(
assetSrc,
{ ignoreInitial: false },
series(assetClean, assetCompile, reload)
);
2020-05-01 14:30:14 +00:00
2020-05-01 17:39:31 +00:00
exports.default = parallel(jsWatch, cssWatch, htmlWatch, assetWatch, serve);