160 lines
3.8 KiB
JavaScript
160 lines
3.8 KiB
JavaScript
const {
|
|
dest,
|
|
parallel,
|
|
series,
|
|
src,
|
|
watch,
|
|
} = require('gulp');
|
|
const newer = require('gulp-newer');
|
|
const imagemin = require('gulp-imagemin');
|
|
const htmlclean = require('gulp-htmlclean');
|
|
const imageResize = require('gulp-image-resize');
|
|
const noop = require('gulp-noop');
|
|
const uglify = require('gulp-uglify-es').default;
|
|
const favicons = require('gulp-favicons');
|
|
const webp = require('gulp-webp');
|
|
const cssnano = require('gulp-cssnano');
|
|
const sass = require('gulp-sass');
|
|
const devBuild = (process.env.NODE_ENV !== 'production')
|
|
const browserSync = require('browser-sync');
|
|
const deleteUnusedImages = require('gulp-delete-unused-images');
|
|
|
|
var server = browserSync.create();
|
|
|
|
const paths = {
|
|
scripts: {
|
|
src: 'src/*.js',
|
|
dest: 'dist/'
|
|
},
|
|
scss: {
|
|
src: 'src/scss/*.scss',
|
|
dest: 'src/',
|
|
},
|
|
css: {
|
|
src: 'src/*.css',
|
|
dest: 'dist/'
|
|
},
|
|
images: {
|
|
src: 'src/images/*.jpg',
|
|
dest: 'dist/images/'
|
|
},
|
|
html: {
|
|
src: 'src/*.html',
|
|
dest: 'dist/'
|
|
},
|
|
pdf: {
|
|
src: 'src/*.pdf',
|
|
dest: 'dist/'
|
|
}
|
|
};
|
|
|
|
|
|
function serve() {
|
|
server.init({
|
|
server: {
|
|
baseDir: './dist'
|
|
}
|
|
})
|
|
|
|
watch(paths.scss.src, series(scss, css));
|
|
watch(paths.html.src).on('change', server.reload);
|
|
}
|
|
|
|
|
|
function images() {
|
|
return src(paths.images.src)
|
|
.pipe(newer(paths.images.dest))
|
|
.pipe(imageResize({
|
|
width: 2400,
|
|
height: 1800,
|
|
crop: false,
|
|
upscale: false
|
|
}))
|
|
.pipe(imagemin({
|
|
progressive: true,
|
|
optimizationLeve: 5,
|
|
svgoPlugins: [{
|
|
removeViewBox: false
|
|
}, {
|
|
removeUselessStrokeAndFill: false
|
|
}]
|
|
}))
|
|
.pipe(dest(paths.images.dest));
|
|
}
|
|
|
|
function imagesWebp() {
|
|
return src(paths.images.src)
|
|
.pipe(newer(paths.images.dest))
|
|
.pipe(imageResize({
|
|
width: 2400,
|
|
height: 1800,
|
|
crop: false,
|
|
upscale: false
|
|
}))
|
|
.pipe(webp())
|
|
.pipe(dest(paths.images.dest))
|
|
}
|
|
|
|
function js() {
|
|
return src(paths.scripts.src)
|
|
.pipe(uglify())
|
|
.pipe(dest(paths.scripts.dest))
|
|
}
|
|
|
|
function scss() {
|
|
return src(paths.scss.src)
|
|
.pipe(sass())
|
|
.pipe(dest(paths.scss.dest))
|
|
.pipe(server.stream());
|
|
}
|
|
|
|
function css() {
|
|
return src(paths.css.src)
|
|
.pipe(cssnano())
|
|
.pipe(dest(paths.css.dest));
|
|
}
|
|
|
|
function html() {
|
|
return src(paths.html.src)
|
|
.pipe(newer(paths.html.dest))
|
|
.pipe(devBuild ? noop() : htmlclean())
|
|
.pipe(dest(paths.html.dest));
|
|
}
|
|
|
|
function pdf() {
|
|
return src(paths.pdf.src)
|
|
.pipe(dest(paths.pdf.dest));
|
|
}
|
|
|
|
function manifest() {
|
|
return src('dist/favicons/manifest.*')
|
|
.pipe(dest(paths.html.dest));
|
|
}
|
|
|
|
function favicon() {
|
|
return src('src/favicon.png')
|
|
.pipe(favicons({
|
|
appName: "Ferienwohnung 'Wanderlust'",
|
|
appShortName: "Ferienwohnung",
|
|
appDescription: "Ferienwohnung in Friedrichroda OT Finsterbergen",
|
|
developerName: 'Christian Seyfferth',
|
|
developerURL: 'https://chrosey.de/',
|
|
background: '#bdf787',
|
|
path: 'favicons/',
|
|
url: 'http://urlaub-friedrichroda.de/',
|
|
display: 'standalone',
|
|
orientation: 'portrait',
|
|
scope: '/',
|
|
start_url: '/',
|
|
version: 1.0,
|
|
logging: false,
|
|
html: 'index.html',
|
|
pipeHTML: true,
|
|
replace: true,
|
|
}))
|
|
.pipe(dest(paths.html.dest + "favicons/"));
|
|
}
|
|
|
|
|
|
exports.default = series(parallel(html, pdf, series(favicon, manifest)), js, series(scss, css), parallel(images, imagesWebp));
|
|
exports.serve = series(serve); |