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