1 | const prop = require('./package.json');
|
2 | const minify = require('gulp-clean-css');
|
3 | const sass = require('gulp-sass')(require('sass'));
|
4 | const gulp = require('gulp');
|
5 | const $ = require('gulp-load-plugins')();
|
6 | const sizereport = require('gulp-sizereport');
|
7 | const gzip = require('gulp-gzip');
|
8 | const head =
|
9 | '/*\r\n* Cirrus ' +
|
10 | prop.version +
|
11 | `\r\n* Stanley Lim, Copyright ${new Date().getFullYear()}\r\n* https://spiderpig86.github.io/Cirrus\r\n*/\r\n`;
|
12 |
|
13 | const environment = {
|
14 | isCi: process.env.CI ?? false,
|
15 | };
|
16 |
|
17 | generateGulpBuild(`ext`, `src/cirrus-ext.scss`, `cirrus`);
|
18 | generateGulpBuild(`core`, `src/cirrus-core.scss`, `cirrus-core`);
|
19 | generateGulpBuild(`all`, `src/cirrus-all.scss`, `cirrus-all`);
|
20 |
|
21 |
|
22 |
|
23 | function generateGulpBuild(taskName, sassFilePath, outputName) {
|
24 | gulp.task(taskName, () => {
|
25 | return gulp
|
26 | .src([sassFilePath])
|
27 | .pipe(
|
28 | sass({
|
29 | includePaths: ['./node_modules'],
|
30 | })
|
31 | )
|
32 | .on('error', sass.logError)
|
33 | .pipe(
|
34 | sass.sync().on('error', function (err) {
|
35 | sass.logError.call(this, err);
|
36 |
|
37 |
|
38 | if (environment.isCi) {
|
39 | throw err;
|
40 | }
|
41 | })
|
42 | )
|
43 | .pipe($.concat(`${outputName}.css`))
|
44 | .pipe($.header(head))
|
45 | .pipe($.size())
|
46 | .pipe(gulp.dest('./dist/'))
|
47 | .on('error', (err) => {
|
48 | console.error(err);
|
49 | process.exit(1);
|
50 | });
|
51 | });
|
52 |
|
53 | gulp.task(
|
54 | `minify-${taskName}`,
|
55 | gulp.series(taskName, () => {
|
56 | return (
|
57 | gulp
|
58 | .src([`./dist/${outputName}.css`])
|
59 | .pipe(
|
60 | minify(
|
61 | {
|
62 | level: {
|
63 | 1: {
|
64 | all: true,
|
65 | normalizeUrls: false,
|
66 | },
|
67 | 2: {
|
68 | all: false,
|
69 | removeDuplicateRules: true,
|
70 | reduceNonAdjacentRules: true,
|
71 | removeDuplicateFontRules: true,
|
72 | removeDuplicateMediaBlocks: true,
|
73 | mergeAdjacentRules: true,
|
74 | mergeIntoShorthands: true,
|
75 | mergeMedia: true,
|
76 | mergeNonAdjacentRules: true,
|
77 | mergeSemantically: false,
|
78 | removeEmpty: true,
|
79 | },
|
80 | },
|
81 | },
|
82 | (details) => {
|
83 | console.log('FULL');
|
84 | console.log(details.name + ': ' + details.stats.originalSize);
|
85 | console.log(`${outputName}.min.css ${details.stats.minifiedSize}`);
|
86 | }
|
87 | )
|
88 | )
|
89 | .pipe($.header(head))
|
90 | .pipe($.size())
|
91 | .pipe($.concat(`${outputName}.min.css`))
|
92 | .pipe(gulp.dest('./dist/'))
|
93 | .on('error', (err) => {
|
94 | console.error(`Error encountered for task ${taskName}. Failing.`);
|
95 | process.exit(1);
|
96 | })
|
97 | );
|
98 | })
|
99 | );
|
100 |
|
101 |
|
102 | gulp.task(
|
103 | `gzip-${taskName}`,
|
104 | gulp.series(taskName, `minify-${taskName}`, () => {
|
105 | return (
|
106 | gulp
|
107 | .src([`./dist/${outputName}.min.css`])
|
108 | .pipe(gzip())
|
109 | .pipe(
|
110 | sizereport({
|
111 | gzip: true,
|
112 | total: false,
|
113 | })
|
114 | )
|
115 | .pipe(gulp.dest('./dist/'))
|
116 | .on('error', (err) => {
|
117 | console.error(`Error encountered for task ${taskName}. Failing.`);
|
118 | process.exit(1);
|
119 | })
|
120 | );
|
121 | })
|
122 | );
|
123 | }
|
124 |
|
125 | gulp.task('watch', () => gulp.watch('./src/**/*.scss', gulp.parallel('minify-ext', 'minify-core', 'minify-all')));
|
126 |
|
127 | gulp.task('default', gulp.parallel('minify-ext', 'minify-core', 'minify-all'));
|
128 |
|
129 | gulp.task('gzip', gulp.parallel('gzip-ext', 'gzip-core', 'gzip-all'));
|