import { src, dest, watch, series, parallel } from 'gulp'; import yargs from 'yargs'; import sass from 'gulp-sass'; import cleanCss from 'gulp-clean-css'; import gulpIf from 'gulp-if'; import postcss from 'gulp-postcss'; import sourcemaps from 'gulp-sourcemaps'; import autoprefixer from 'autoprefixer'; import imagemin from 'gulp-imagemin'; import webpack from 'webpack-stream'; import named from 'vinyl-named'; import fileInclude from 'gulp-file-include' import del from 'del'; import browserSync from "browser-sync"; const PRODUCTION = yargs.argv.prod; export const styles = () => { return src(['source/sass/main.scss', 'source/sass/print.scss']) .pipe(gulpIf(!PRODUCTION, sourcemaps.init())) .pipe(sass().on('error', sass.logError)) .pipe(gulpIf(PRODUCTION, postcss([ autoprefixer ]))) .pipe(gulpIf(PRODUCTION, cleanCss({compatibility:'ie11'}))) .pipe(gulpIf(!PRODUCTION, sourcemaps.write())) .pipe(dest('output/css/styles/inner')); } export const scripts = () => { return src(['source/js/index.js']) .pipe(named()) .pipe(webpack({ module: { rules: [ { test: /\.js$/, use: { loader: 'babel-loader', options: { presets: [] } } }, { test: /\.css$/, use: [ 'style-loader', 'css-loader'] }, ] }, mode: PRODUCTION ? 'production' : 'development', devtool: /* !PRODUCTION ? 'eval-cheap-source-map' :*/ false, output: { filename: '[name].js' }, })) .pipe(dest('output/js')); } export const images = () => { src('source/dummy/**/*.{jpg,jpeg,png,svg,gif}') .pipe(gulpIf(PRODUCTION, imagemin())) .pipe(dest('output/dummy')); return src('source/img/**/*.{jpg,jpeg,png,svg,gif}') .pipe(gulpIf(PRODUCTION, imagemin())) .pipe(dest('output/img')); } export const copy = () => { src(['source/services/**/*']) .pipe(dest('output/services/')); return src(['source/fonts/**/*']) .pipe(dest('output/fonts/')); } export const html = () => { return src(['./source/pages/*']) .pipe(fileInclude({ prefix: '@@', basepath: './source/includes/' })) .pipe(dest('./output/')); } export const clean = () => del(['output']); const server = browserSync.create(); export const serve = done => { server.init({ proxy: "http://localhost/ihk24/templates/output" }); done(); }; export const reload = done => { server.reload(); done(); }; export const watcher = () => { watch('source/sass/**/*.scss', series(styles, reload)); watch(['source/img/**/*.{jpg,jpeg,png,svg,gif}', 'source/dummy/**/*.{jpg,jpeg,png,svg,gif}'], series(images, reload)); watch(['source/fonts/**/*'], series(copy, reload)); watch('source/js/**/*.js', series(scripts, reload)); watch(['source/pages/**/*', 'source/includes/**/*'], series(html, reload)); } export const dev = series(clean, parallel(html, styles, scripts, images, copy), serve, watcher); export const build = series(clean, parallel(html, styles, scripts, images, copy)); export default dev;