UNPKG

5.02 kBJavaScriptView Raw
1const prop = require('./package.json');
2const minify = require('gulp-clean-css');
3const sass = require('gulp-sass')(require('sass')); // Use Dart Sass;
4const gulp = require('gulp');
5const $ = require('gulp-load-plugins')();
6const sizereport = require('gulp-sizereport');
7const gzip = require('gulp-gzip');
8const 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
13const environment = {
14 isCi: process.env.CI ?? false, // Github actions default variable is always set to true
15};
16
17generateGulpBuild(`ext`, `src/cirrus-ext.scss`, `cirrus`);
18generateGulpBuild(`core`, `src/cirrus-core.scss`, `cirrus-core`);
19generateGulpBuild(`all`, `src/cirrus-all.scss`, `cirrus-all`);
20
21// source file name
22// file name
23function 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 // Fail job if in CI
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 // Create Gzipped build
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
125gulp.task('watch', () => gulp.watch('./src/**/*.scss', gulp.parallel('minify-ext', 'minify-core', 'minify-all')));
126
127gulp.task('default', gulp.parallel('minify-ext', 'minify-core', 'minify-all'));
128
129gulp.task('gzip', gulp.parallel('gzip-ext', 'gzip-core', 'gzip-all'));