-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgulpfile.babel.js
68 lines (64 loc) · 2.25 KB
/
gulpfile.babel.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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 postcssPresetEnv from 'postcss-preset-env';
import autoprefixer from 'autoprefixer';
import tailwindcss from 'tailwindcss';
import atimport from 'postcss-import';
import del from 'del';
import browserSync from 'browser-sync';
import imagemin from 'gulp-imagemin';
import purgecss from '@fullhuman/postcss-purgecss';
const PRODUCTION = yargs.argv.prod;
const server = browserSync.create();
export const clean = () => del(['static']);
export const styles = () => {
return (
src('src/scss/app.scss')
.pipe(gulpif(!PRODUCTION, sourcemaps.init()))
.pipe(sass().on('error', sass.logError))
// https://gist.github.com/taylorbryant/91fc05b12472a88a8b6494f610647cd4
.pipe(
postcss([
atimport(),
tailwindcss('./tailwind.config.js'),
postcssPresetEnv({ stage: 1 }),
...(process.env.NODE_ENV === 'production'
? [
purgecss({
content: ['./themes/apap/layouts/**/*.html'],
defaultExtractor: content => content.match(/[\w-/:]+(?<!:)/g) || []
})
]
: [])
])
)
.pipe(gulpif(PRODUCTION, postcss([autoprefixer])))
.pipe(gulpif(PRODUCTION, cleanCss({ compatibility: 'ie8' })))
.pipe(gulpif(!PRODUCTION, sourcemaps.write()))
.pipe(dest('static/css'))
.pipe(server.stream())
);
};
export const images = () => {
return src(['src/images/*.{jpg,jpeg,png,svg,gif}', 'src/images/**/*.{jpg,jpeg,png,svg,gif}'])
.pipe(gulpif(PRODUCTION, imagemin()))
.pipe(dest('static/images'));
};
export const copy = () => {
return src(['src/**/*', '!src/{images,js,scss,css}', '!src/{images,js,scss,css}/**/*']).pipe(
dest('static')
);
};
export const watchForChanges = () => {
watch('src/scss/**/*.scss', styles);
watch('src/images/**/*.{jpg,jpeg,png,svg,gif}', series(images));
watch(['src/**/*', '!src/{images,js,scss}', '!src/{images,js,scss}/**/*'], series(copy));
};
export const dev = series(clean, parallel(styles, images, copy), watchForChanges);
export const build = series(clean, parallel(styles, images, copy));
export default dev;