-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
116 lines (102 loc) · 2.67 KB
/
index.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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
const autoprefixer = require('autoprefixer');
const del = require('del');
const gulpif = require('gulp-if');
const perfectionist = require('perfectionist');
const postcss = require('gulp-postcss');
const postcssImport = require('postcss-easy-import');
const postcssPresetEnv = require('postcss-preset-env');
const precss = require('precss');
const rename = require('gulp-rename');
const sourcemaps = require('gulp-sourcemaps');
const strip = require('gulp-strip-comments');
const stylelint = require('gulp-stylelint');
const tailwindcss = require('tailwindcss');
// const error = require('./core').error;
let gulp = null;
let config = {};
let tasks = [];
let browserSync = null;
/**
* Compile
*/
function twCompile() {
return gulp.src(config.src)
.pipe(sourcemaps.init())
.pipe(postcss([
postcssImport(),
tailwindcss(config.twConfig),
postcssPresetEnv(),
precss(),
autoprefixer(),
perfectionist({ format: config.outputStyle })
]))
.pipe(rename(config.destName))
.pipe(gulpif(config.removeComments, strip.text()))
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest(config.dest));
}
twCompile.description = 'Compile Tailwind & scss to css using postcss, sourcemaps, and autoprefixer.';
/**
* Clean
*/
function twClean() {
return del([
config.dest
], { force: true });
}
twClean.description = 'Delete compiled css files.';
/**
* Validate
*/
function twValidate() {
return gulp.src(config.lintSrc)
.pipe(stylelint({
failAfterError: false,
reporters: [{
formatter: 'string', console: true
}]
}));
}
twValidate.description = 'Validate (lint) css for errors.';
/**
* Reload
*/
function twReload(done) {
if (browserSync) {
browserSync.reload();
}
done();
}
twReload.description = 'Reload browsers.';
/**
* Watch
*/
function twWatch() {
const watchSrc = [
config.src,
config.twConfig,
config.lintSrc
];
const watchTasks = [twCompile];
if (config.lint) {
watchTasks.push(twValidate);
}
return gulp.watch(watchSrc, gulp.series(gulp.parallel(watchTasks), twReload));
}
twWatch.description = 'Watch Tailwind files for changes.';
module.exports = (options) => {
gulp = options.gulp;
config = options.config;
tasks = options.tasks;
browserSync = options.browserSync;
gulp.task('compile:tw', twCompile);
tasks.compile.push('compile:tw');
gulp.task('clean:tw', twClean);
tasks.clean.push('clean:tw');
if (config.lint) {
gulp.task('validate:tw', twValidate);
tasks.validate.push('validate:tw');
}
gulp.task('watch:tw', twWatch);
tasks.watch.push('watch:tw');
}