## Description v1.5.0 of the template was released. I pulled in the changes. ## Type of change - [x] 🌻 Feature ## Test Plan <!-- How will this be tested prior to merging.--> - [x] 💪 Manual
249 lines
7.3 KiB
JavaScript
249 lines
7.3 KiB
JavaScript
const browsersync = require('browser-sync').create();
|
|
const cached = require('gulp-cached');
|
|
const cleanCSS = require('clean-css');
|
|
const cssnano = require('gulp-cssnano');
|
|
const del = require('del');
|
|
const fileinclude = require('gulp-file-include');
|
|
const gulp = require('gulp');
|
|
const gulpif = require('gulp-if');
|
|
const npmdist = require('gulp-npm-dist');
|
|
const replace = require('gulp-replace');
|
|
const uglify = require('gulp-uglify');
|
|
const useref = require('gulp-useref-plus');
|
|
const rename = require('gulp-rename');
|
|
const sass = require('gulp-sass')(require('sass'));
|
|
const sourcemaps = require("gulp-sourcemaps");
|
|
const postcss = require('gulp-postcss');
|
|
const autoprefixer = require("autoprefixer");
|
|
const tailwindcss = require('tailwindcss');
|
|
|
|
|
|
const paths = {
|
|
config: {
|
|
tailwind: "./tailwind.config.js",
|
|
},
|
|
base: {
|
|
base: {
|
|
dir: './'
|
|
},
|
|
node: {
|
|
dir: '../node_modules'
|
|
},
|
|
packageLock: {
|
|
files: './package-lock.json'
|
|
}
|
|
},
|
|
dist: {
|
|
base: {
|
|
dir: './dist',
|
|
files: './dist/**/*'
|
|
},
|
|
libs: {
|
|
dir: './dist/assets/libs'
|
|
},
|
|
css: {
|
|
dir: './dist/assets/css',
|
|
},
|
|
js: {
|
|
dir: './dist/assets/js',
|
|
files: './dist/assets/js/pages',
|
|
},
|
|
},
|
|
src: {
|
|
base: {
|
|
dir: './src',
|
|
files: './src/**/*'
|
|
},
|
|
css: {
|
|
dir: './src/assets/css',
|
|
files: './src/assets/css/**/*'
|
|
},
|
|
html: {
|
|
dir: './src',
|
|
files: './src/**/*.html',
|
|
},
|
|
img: {
|
|
dir: './src/assets/images',
|
|
files: './src/assets/images/**/*',
|
|
},
|
|
js: {
|
|
dir: './src/assets/js',
|
|
pages: './src/assets/js/pages',
|
|
files: './src/assets/js/pages/*.js',
|
|
main: './src/assets/js/*.js',
|
|
},
|
|
partials: {
|
|
dir: './src/partials',
|
|
files: './src/partials/**/*'
|
|
},
|
|
scss: {
|
|
dir: './src/assets/scss',
|
|
files: './src/assets/scss/**/*',
|
|
main: './src/assets/scss/*.scss',
|
|
icon: './src/assets/scss/icons.scss'
|
|
}
|
|
}
|
|
};
|
|
|
|
gulp.task('browsersync', function (callback) {
|
|
browsersync.init({
|
|
server: {
|
|
baseDir: [paths.dist.base.dir, paths.src.base.dir, paths.base.base.dir]
|
|
},
|
|
open: false,
|
|
});
|
|
callback();
|
|
});
|
|
|
|
gulp.task('browsersyncReload', function (callback) {
|
|
browsersync.reload();
|
|
callback();
|
|
});
|
|
|
|
gulp.task('watch', function () {
|
|
gulp.watch([paths.src.scss.files, '!' + paths.src.scss.icon], gulp.series('scss', 'browsersyncReload'));
|
|
gulp.watch(paths.src.scss.icon, gulp.series('icons', 'browsersyncReload'));
|
|
gulp.watch([paths.src.js.dir], gulp.series('js', 'browsersyncReload'));
|
|
// gulp.watch([paths.src.js.pages], gulp.series('jsPages', 'browsersyncReload'));
|
|
gulp.watch([paths.src.html.files, paths.src.partials.files], gulp.series(['fileinclude', 'scss'], 'browsersyncReload'));
|
|
});
|
|
|
|
gulp.task('js', function () {
|
|
return gulp
|
|
.src(paths.src.js.main)
|
|
// .pipe(uglify())
|
|
.pipe(gulp.dest(paths.dist.js.dir));
|
|
});
|
|
|
|
// gulp.task('jsPages', function () {
|
|
// return gulp
|
|
// .src(paths.src.js.files)
|
|
// // .pipe(uglify())
|
|
// .pipe(gulp.dest(paths.dist.js.files));
|
|
// });
|
|
|
|
const cssOptions = {
|
|
compatibility: "*", // (default) - Internet Explorer 10+ compatibility mode
|
|
inline: ["all"], // enables all inlining, same as ['local', 'remote']
|
|
level: 2, // Optimization levels. The level option can be either 0, 1 (default), or 2, e.g.
|
|
};
|
|
|
|
|
|
gulp.task('scss', function () {
|
|
// generate tailwind
|
|
return gulp
|
|
.src([paths.src.scss.main, '!' + paths.src.scss.icon])
|
|
.pipe(sourcemaps.init())
|
|
.pipe(sass().on('error', sass.logError))
|
|
|
|
.pipe(postcss([
|
|
tailwindcss(paths.config.tailwind),
|
|
autoprefixer()
|
|
]))
|
|
.pipe(gulp.dest(paths.dist.css.dir))
|
|
// .pipe(cssnano({ svgo: false }))
|
|
.on("data", function (file) {
|
|
const buferFile = new cleanCSS(cssOptions).minify(file.contents);
|
|
return (file.contents = Buffer.from(buferFile.styles));
|
|
})
|
|
.pipe(
|
|
rename({
|
|
suffix: ".min"
|
|
})
|
|
)
|
|
.pipe(sourcemaps.write("./"))
|
|
.pipe(gulp.dest(paths.dist.css.dir));
|
|
});
|
|
|
|
|
|
gulp.task('icons', function () {
|
|
return gulp
|
|
.src(paths.src.scss.icon)
|
|
.pipe(sass().on('error', sass.logError))
|
|
.pipe(gulp.dest(paths.dist.css.dir))
|
|
.on("data", function (file) {
|
|
const buferFile = new cleanCSS(cssOptions).minify(file.contents);
|
|
return (file.contents = Buffer.from(buferFile.styles));
|
|
})
|
|
.pipe(
|
|
rename({
|
|
suffix: ".min"
|
|
})
|
|
)
|
|
.pipe(gulp.dest(paths.dist.css.dir));
|
|
});
|
|
|
|
gulp.task('fileinclude', function () {
|
|
return gulp
|
|
.src([
|
|
paths.src.html.files,
|
|
'!' + paths.dist.base.files,
|
|
'!' + paths.src.partials.files
|
|
])
|
|
.pipe(fileinclude({
|
|
prefix: '@@',
|
|
basepath: '@file',
|
|
indent: true,
|
|
}))
|
|
.pipe(cached())
|
|
.pipe(gulp.dest(paths.dist.base.dir));
|
|
});
|
|
|
|
gulp.task('clean:packageLock', function (callback) {
|
|
del.sync(paths.base.packageLock.files);
|
|
callback();
|
|
});
|
|
|
|
gulp.task('clean:dist', function (callback) {
|
|
del.sync(paths.dist.base.dir);
|
|
callback();
|
|
});
|
|
|
|
gulp.task('copy:all', function () {
|
|
return gulp
|
|
.src([
|
|
paths.src.base.files,
|
|
'!' + paths.src.partials.dir, '!' + paths.src.partials.files,
|
|
'!' + paths.src.scss.dir, '!' + paths.src.scss.files,
|
|
'!' + paths.src.js.dir, '!' + paths.src.js.files, '!' + paths.src.js.main,
|
|
'!' + paths.src.html.files,
|
|
])
|
|
.pipe(gulp.dest(paths.dist.base.dir));
|
|
});
|
|
|
|
gulp.task('copy:libs', function () {
|
|
return gulp
|
|
.src(npmdist({ nodeModulesPath: '../' }), { base: paths.base.node.dir })
|
|
.pipe(rename(function (path) {
|
|
path.dirname = path.dirname.replace(/\/dist/, '').replace(/\\dist/, '');
|
|
}))
|
|
.pipe(gulp.dest(paths.dist.libs.dir));
|
|
});
|
|
|
|
gulp.task('html', function () {
|
|
return gulp
|
|
.src([
|
|
paths.src.html.files,
|
|
'!' + paths.dist.base.files,
|
|
'!' + paths.src.partials.files
|
|
])
|
|
.pipe(fileinclude({
|
|
prefix: '@@',
|
|
basepath: '@file',
|
|
indent: true,
|
|
}))
|
|
.pipe(replace(/href="(.{0,10})node_modules/g, 'href="$1assets/libs'))
|
|
.pipe(replace(/src="(.{0,10})node_modules/g, 'src="$1assets/libs'))
|
|
.pipe(useref())
|
|
.pipe(cached())
|
|
.pipe(gulpif('*.js', uglify()))
|
|
.pipe(gulpif('*.css', cssnano({ svgo: false })))
|
|
.pipe(gulp.dest(paths.dist.base.dir));
|
|
});
|
|
|
|
// Default(Producation) Task
|
|
gulp.task('default', gulp.series(gulp.parallel('clean:packageLock', 'clean:dist', 'copy:all', 'copy:libs', 'fileinclude', 'scss', 'icons', 'js', 'html'), gulp.parallel('browsersync', 'watch')));
|
|
|
|
// Build(Development) Task
|
|
gulp.task('build', gulp.series('clean:packageLock', 'clean:dist', 'copy:all', 'copy:libs', 'fileinclude', 'scss', 'icons', 'js', 'html'));
|